前端如何利用CryptoJS實現(xiàn)數(shù)據(jù)信息的加密詳解
安裝
npm install crypto-js
引入
import CryptoJS from "crypto-js";
CryptoJS是一種常用的前端加密庫,支持多種加密方式,以下是其中常用的幾種加密算法:
SHA256哈希算法
SHA256是一種常見的哈希算法,可以生成一個256位的哈希值,通常用于數(shù)據(jù)簽名和身份驗證等場合。使用CryptoJS的SHA256方法可以方便地計算SHA256哈希值。
SHA256哈希算法,它是一種單向加密算法,不提供解密方法。它的作用是將任意長度的明文數(shù)據(jù),經(jīng)過哈希計算后生成一個固定長度的哈希值。因為一般情況下哈希值和原始數(shù)據(jù)之間的關系不可逆
//加密 const plaintilit = 'hello world' const hash = CryptoJS.SH256(plaintilit).toString console.log(hash) // "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
AES對稱加密算法
AES是一種常見的對稱加密算法,通過相同的密鑰進行加密和解密,常用于數(shù)據(jù)保護和機密信息存儲等場合。使用CryptoJS的AES方法可以方便地進行AES加密和解密操作。
key是對稱加密算法的核心參數(shù),同一個明文和密鑰加密后得到的密文是相同的,因此密鑰必須保密并且不易被破解。key的長度可以是128位、192位或256位,不同長度的key對應著不同的安全級別。
iv是用于增加加密強度的參數(shù),它需要與key一起作為輸入?yún)?shù)傳遞給加密算法。iv的長度為128位,它在每次加密時都會改變,并與key一起參與加密過程。iv的作用是將相同的明文使用不同的iv加密后生成不同的密文,從而增加破解的難度和安全性。
//設置key和對應的iv //在CryptoJS中,CryptoJS.enc.Utf8.parse方法用于將字符串轉(zhuǎn)換為UTF-8編碼的字節(jié)數(shù)組,這是因為加算 //法通常需要將字符串轉(zhuǎn)換為字節(jié)流進行處理。在對字符串進行加密或解密之前,需要先將其轉(zhuǎn)換為字節(jié)數(shù)組。 const plaintitle = 'hello world' const key = CryptoJS.enc.Utf8.parse('zxcvbnm') const iv = CryptoJS.enc.Utf8.parse('zxcvbnm') // 加密 const ciphertext = CryptoJS.AES.encrypt(plaintitle , key, { iv: iv }) console.log(ciphertext.toString()) // "U2FsdGVkX1/z9g+JQzthGtFlKeZeBjJ92Z1nxv5vxsw=" // 解密 const decrypted = CryptoJS.AES.decrypt(ciphertext, key, { iv: iv }) console.log(decrypted.toString(CryptoJS.enc.Utf8)) // "hello world"
HMAC哈希消息認證碼
HMAC是一種基于哈希函數(shù)和密鑰的消息認證碼算法,可以用于驗證數(shù)據(jù)完整性和真實性。使用CryptoJS的HmacSHA256方法可以方便地計算HMAC-SHA256哈希值。
const plaintitle = 'hello world' const key = CryptoJS.enc.Utf8.parse('1234567890123456') const hmac = CryptoJS.HmacSHA256(plaintitle , key).toString() console.log(hmac) // "f7e329a7c587374e4ed7c80b5be95c9a5997c84da20f5aaede26327bd2b705d8"
計算MD5哈希值
在使用toString()
方法將其轉(zhuǎn)換為字符串類型時,我們傳入了CryptoJS.enc.Hex
參數(shù),表示將其轉(zhuǎn)換為十六進制字符串格式。
var hash = CryptoJS.MD5("Message"); console.log(hash.toString(CryptoJS.enc.Hex)); // 輸出16進制格式的md5哈希值
記錄一些常用的加密方式
base64轉(zhuǎn)碼和解碼
let str = 'ImGod'; let str64 = window.btoa(str); console.log('轉(zhuǎn)化后:'+str64);//SW1HB2Q= let jm = window.atob(str64); console.log('解碼后:'+jm);//ImGod
js編碼
encodeURIComponent
會將特殊字符(除了字母、數(shù)字、標點符號和某些保留字符以外的所有字符)都轉(zhuǎn)換為UTF-8編碼的格式,然后再將其轉(zhuǎn)換為16進制值。
decodeURIComponent
是JavaScript中的一個內(nèi)置函數(shù),用于將使用encodeURIComponent
函數(shù)編碼的字符串進行解碼。
const text = '阿拉斯加' const encodedText = encodeURIComponent(text) console.log(encodedText,'url編碼'); const textTitle = decodeURIComponent(encodedText) console.log(textTitle,'url解碼');
總結(jié)
到此這篇關于前端如何利用CryptoJS實現(xiàn)數(shù)據(jù)信息加密的文章就介紹到這了,更多相關CryptoJS實現(xiàn)數(shù)據(jù)信息加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
webpack組織模塊打包Library的原理及實現(xiàn)
這篇文章主要介紹了webpack組織模塊打包Library的原理及實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03JavaScript實現(xiàn)異步獲取表單數(shù)據(jù)
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)異步獲取表單數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-05-05ff chrome和ie下全局動態(tài)定位的異同及全局高度的取法
這篇文章主要介紹了ff chrome和ie下全局動態(tài)定位的異同及全局高度的取法,需要的朋友可以參考下2014-06-06《javascript設計模式》學習筆記二:Javascript面向?qū)ο蟪绦蛟O計繼承用法分析
這篇文章主要介紹了Javascript面向?qū)ο蟪绦蛟O計繼承用法,結(jié)合實例形式分析了《javascript設計模式》中JavaScript面向?qū)ο蟪绦蛟O計繼承相關概念、原理、用法及操作注意事項,需要的朋友可以參考下2020-04-04JavaScript實現(xiàn)前端飛機大戰(zhàn)小游戲
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)前端飛機大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05