JS常見加解密算法小結(jié)
消息摘要算法
消息摘要算法
消息摘要算法是一種單向散列函數(shù),常用于加密和數(shù)據(jù)完整性驗(yàn)證。常見的消息摘要算法包括MD5、SHA-1、SHA-256和SHA-512等。它的特點(diǎn)是對(duì)不同的明文生成唯一且定長(zhǎng)的密文,是不可逆的,即無法通過“密文”還原出明文。
md5
const CryptoJs = require('crypto-js'); let password = "123456"; let encPwd = CryptoJs.MD5(password).toString(); console.log(encPwd); // e10adc3949ba59abbe56e057f20f883e
sha1
const CryptoJs = require('crypto-js'); let password = "123456"; let encPwd = CryptoJs.SHA1(password).toString(); console.log(encPwd); // 7c4a8d09ca3762af61e59520943dc26494f8941b
對(duì)稱加密算法
對(duì)稱加密算法
對(duì)稱加密算法是一種加密技術(shù),它使用相同的密鑰(稱為對(duì)稱密鑰)同時(shí)用于加密和解密數(shù)據(jù)。常見的加密算法有DES
、AES
、3DES
等。AES是一種廣泛使用的對(duì)稱加密算法,被認(rèn)為是目前最安全的對(duì)稱加密算法之一。
AES-ECB
let password = "123456"; let key = "1234567890abcdef" cfg = { mode: CryptoJs.mode.ECB, padding: CryptoJs.pad.Pkcs7 } let encPwd = CryptoJs.AES.encrypt(password, key, cfg).toString() console.log(encPwd) // U2FsdGVkX1+meKI+IXd44qgc50bKb2rDbN91OutwBWs=
根據(jù)密鑰長(zhǎng)度的不同, 可以把AES加密算法分為AES-128/AES-192/AES-256。也就是說密鑰的長(zhǎng)度必須是16/24/32個(gè)字節(jié) 。常見mode模式有CBC
、ECB
兩種,這兩種模式的區(qū)別在于是否需要配置iv
向量
AES-CBC
const CryptoJs = require('crypto-js'); let password = CryptoJs.enc.Utf8.parse("123456") // 指定以什么編碼方式解析明文 let key = CryptoJs.enc.Utf8.parse("1234567890abcdef") let iv = CryptoJs.enc.Utf8.parse("123456") // 需指定初始向量 cfg = { mode: CryptoJs.mode.CBC, padding: CryptoJs.pad.Pkcs7, iv: iv } let encPwd = CryptoJs.AES.encrypt(password, key, cfg).toString()
非對(duì)稱加密算法
非對(duì)稱加密算法
非對(duì)稱加密算法是一種密碼學(xué)中的加密方式,也被稱為公鑰加密算法。與對(duì)稱加密算法不同,非對(duì)稱加密算法使用一對(duì)密鑰,分別是公鑰和私鑰。非對(duì)稱加密算法的一個(gè)關(guān)鍵特性是,使用公鑰加密的數(shù)據(jù)只能由相應(yīng)的私鑰解密,而使用私鑰加密的數(shù)據(jù)只能由相應(yīng)的公鑰解密。常見的非對(duì)稱加密算法包括RSA和ECC等
公鑰可以公開分享的密鑰,用于加密數(shù)據(jù)。任何人都可以獲得公鑰,但不能由公鑰推導(dǎo)出私鑰。
私鑰是保密的密鑰,用于解密由公鑰加密的數(shù)據(jù)。只有私鑰的持有者能夠解密使用公鑰加密的信息。
RSA
window = global const JSEncrypt = require('jsencrypt') publickey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnX3j/luQG7JnPFIFJKEvPC/tFtv14XIzT7FQXYpKsOt2t4uLh6hZa5H5WcEinF46nc91UbrS5UA9Fnnm+Ev20pwUEPVu4On47am6vJOsq8oqQoZDsMu6VGZIzKIm8vDylO6I2xrTaXY2G3hdiRKF7988tA4oYsFOTZ/yG/BOlNwIDAQAB' // 加密 let jse = new JSEncrypt() jse.setPublicKey(publickey) var encStr = jse.encrypt('123456') console.log("加密數(shù)據(jù): " + encStr) // 解密 privatekey = 'MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKdfeP+W5Absmc8UgUkoS88L+0W2/XhcjNPsVBdikqw63a3i4uHqFlrkflZwSKcXjqdz3VRutLlQD0Weeb4S/bSnBQQ9W7g6fjtqbq8k6yryipChkOwy7pUZkjMoiby8PKU7ojbGtNpdjYbeF2JEoXv3zy0DihiwU5Nn/Ib8E6U3AgMBAAECgYA6KW0stEytM08HrQJ4X65oVquMwFg4mUC+7CMUtUZu303lfTCGfQgjsb9NXluA5SjHe/Xvv0DCHNYRxU5dBNBwhIXaRLy6zLKKKp/0gOn1C3dFY/MQOVoEpJ8uxUQh9Kf37F5J9gT64JNooKTTNydqTcmfIhG/u3WFiTVjfW5sEQJBANmvAgUneA6eEC6LwhX9gxdp0T2S+hop19zAm4ErHQld47TlSAxVgwArQG4oJ5J2OWlIT4vzuO1OJOaCj4wZYXMCQQDE1W0uZA1YtjVK7OUuD3f/rgNzolpc0XEEZDPxKsoirEFgW/cFNCTJKIdGK2RgnthLWiN01a9bL6+sF2vLO2wtAkAd0h3Cuv91cS3iUn8KKCqXQIXLm6DriKPrt+8VqORXbidNlsNh/SzvDv3KmXGiXNPMmn1bPM4upC/l7CjiFnAFAkBnmu+dO4zK5R2oEomPdRT0v+OROiPWN2gFp7iveJZtKb4/uiiL1KaIO4z4ol5zfSjcgNWo6dEjbjZJnwpeLykBAkAY/tYLGyrHe0isoZL2xXPlrvde2tbKcbzMrheH1wuqEMX0o0+uHCyFgn2rAzMcfUlntb9iZLLJDkJ+bFET1j3l' jse.setPrivateKey(privatekey) var Str = jse.decrypt(encStr) console.log("解密數(shù)據(jù): " + Str)
本文介紹了Web開發(fā)中常見的加解密算法,包括消息摘要、對(duì)稱加密和非對(duì)稱加密。這些算法在保障用戶數(shù)據(jù)安全、通信加密方面發(fā)揮著關(guān)鍵作用。深入理解它們有助于開發(fā)者選擇合適的安全策略,確保系統(tǒng)的完整性和用戶隱私的最大保護(hù)。在數(shù)字化時(shí)代,掌握這些加密技術(shù)是構(gòu)建可信賴Web應(yīng)用系統(tǒng)的重要一環(huán)。
以上就是JS常見加解密算法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于JS加解密算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript自定義超時(shí)API代碼實(shí)例
這篇文章主要介紹了JavaScript自定義超時(shí)API代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04一文教你徹底學(xué)會(huì)JavaScript手寫防抖節(jié)流
其實(shí)防抖和節(jié)流不僅僅在面試中會(huì)讓大家手寫,在實(shí)際項(xiàng)目中也可以起到性能優(yōu)化的作用,所以還是很有必要掌握的。本文就帶大家徹底學(xué)會(huì)JavaScript手寫防抖節(jié)流,需要的可以參考一下2022-11-11JavaScript實(shí)現(xiàn)讀取條碼中的二進(jìn)制數(shù)據(jù)
條碼是一種以機(jī)器可讀的可視形式表示數(shù)據(jù)的方法,我們可以從條碼獲取二進(jìn)制數(shù)據(jù),并通過不同方法去讀碼,下面我們就來看看如何實(shí)現(xiàn)讀取條碼中的二進(jìn)制數(shù)據(jù)吧2024-03-03JS中的一些常用的函數(shù)式編程術(shù)語(yǔ)
這篇文章主要介紹了JS中的一些常用的函數(shù)式編程術(shù)語(yǔ),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,2019-06-06webpack本地開發(fā)環(huán)境無法用IP訪問的解決方法
下面小編就為大家分享一篇webpack本地開發(fā)環(huán)境無法用IP訪問的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03使用JavaScript制作待辦事項(xiàng)列表的示例代碼
這篇文章主要介紹了如何使用 JavaScript創(chuàng)建待辦事項(xiàng)列表HTML的完整信息和教程,文中但是示例代碼講解詳細(xì),感興趣的同學(xué)可以動(dòng)手試一試2022-01-01