JS加解密庫CryptoJS

1.編碼

escape unescape算法

encodeURIComponent decodeURIComponent安全

1.1Base64

  1. 全部的數據都能被編碼爲只用65個字符就能表示的文本。 標準的Base64每行爲76個字符,每行末尾添加一個回車換行符(\r\n)。不論每行是否滿76個字符,都要添加一個回車換行符。
  2. 65字符:A~Z a~z 0~9 + / = URL Base64算法中,爲了安全,會把 + 替換成 - ,把 / 替換成 _ = 有時候用 ~ 或 . 代替
  3. Base64的應用 密鑰 密文 圖片 數據簡單加密或者預處理
  4. Base64編碼解碼與btoa、atob

1.2Hex

二進制數據最經常使用的一種表示方式。用0-9 a-f 16個字符表示。每一個十六進制字符表明4bit。也就是2個十六進制字符表明一個字節。在實際應用中,尤爲在密鑰初始化的時候,必定要分清楚本身傳進去的密鑰是哪一種方式編碼的,採用對應方式解析,才能獲得正確的結果bash

2.單向散列函數(消息摘要算法)

  • 無論明文多長,散列後的密文定長服務器

  • 明文不同,散列後結果必定不同markdown

  • 散列後的密文不可逆函數

  • 通常用於校驗數據完整性、簽名 sign性能

  • ​ 因爲密文不可逆,因此後臺沒法還原,也就是說他要驗證,會在後臺以跟前臺同樣的方式去從新簽名一遍。也就是說他會把源數據和簽名後的值一塊兒提交到後臺。因此咱們要保證在簽名時候的數據和提交上去的源數據一致。這種算法特喜歡在內部加入時間戳,不少粗心的學員,一般會在簽名的時候取一次時間戳,而後在提交源數據的時候,又取一次時間戳,致使後臺驗證失敗。編碼

  • 常見算法 MD5 SHA1 SHA256 SHA512 HmacMD5 HmacSHA1 HmacSHA256加密

3.加密算法

加密和解密的過程是可逆的spa

3.1對稱加密算法

  1. 加密/解密使用相同的密鑰
  2. DES 數據加密標準
  3. 3DES TripleDES DESede
  4. AES 高級加密標準,根據密鑰長度不一樣又分爲AES-128 AES-192 AES-256,其中AES-192 AES-256在Java中使用需獲取無政策限制權限文件
  5. CryptoJS提供ECB,CBC,CFB,OFB,CTR五種模式 填充提供NoPadding ZeroPadding Pkcs7(Pkcs5) Iso10126 Iso97971 AnsiX923

3.2非對稱加密算法

RSA
  1. 使用公鑰加密,使用私鑰解密
  2. 公鑰是公開的,私鑰保密
  3. 加密處理安全,可是性能極差,單次加密長度有限制 pkcs1padding 明文最大字節數爲密鑰字節數-11密文與密鑰等長 NoPadding 明文最大字節數爲密鑰字節數 密文與密鑰等長
  4. RSA既可用於數據交換,也可用於數據校驗 數據校驗一般結合消息摘要算法 MD5withRSA 等
  5. 兩種加密算法常見結合套路 隨機生成密鑰 密鑰用於AES/DES/3DES加密數據 RSA對密鑰加密 提交加密後的密鑰和加密後的數據給服務器

4.JavaScript實現

4.1parse和stringify
var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
var wordArray = CryptoJS.enc.Hex.parse(hexString);
var wordArray = CryptoJS.enc.Base64.parse(base64String);
var wordArray = CryptoJS.enc.Latin1.parse(latin1String);

var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
var hexString = CryptoJS.enc.Hex.stringify(wordArray);
var base64String = CryptoJS.enc.Base64.stringify(wordArray);
var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);

CryptoJS.format.OpenSSL.parse
CryptoJS.format.OpenSSL.stringify
複製代碼
4.2Base64與Hex
var srcs = CryptoJS.enc.Utf8.parse("15968079470");
CryptoJS.enc.Base64.stringify(srcs);
//CryptoJS.enc.Hex.stringify(srcs);
複製代碼
4.3消息摘要算法
var hash = CryptoJS.MD5(message);
var hash = CryptoJS.MD5(wordArray);
var hmac = CryptoJS.HmacMD5(message, key);

var hash = CryptoJS.SHA1(message);
var hash = CryptoJS.SHA1(wordArray);
var hmac = CryptoJS.HmacSHA1(message, key);

var hash = CryptoJS.SHA224(message);
var hash = CryptoJS.SHA224(wordArray);
var hmac = CryptoJS.HmacSHA224(message, key);

var hash = CryptoJS.SHA256(message);
var hash = CryptoJS.SHA256(wordArray);
var hmac = CryptoJS.HmacSHA256(message, key);

var hash = CryptoJS.SHA3(message);
var hash = CryptoJS.SHA3(wordArray);
var hmac = CryptoJS.HmacSHA3(message, key);

var hash = CryptoJS.SHA384(message);
var hash = CryptoJS.SHA384(wordArray);
var hmac = CryptoJS.HmacSHA384(message, key);

var hash = CryptoJS.SHA512(message);
var hash = CryptoJS.SHA512(wordArray);
var hmac = CryptoJS.HmacSHA512(message, key);
複製代碼
4.4對稱加密算法
var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);

var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
var plaintext  = CryptoJS.DES.decrypt(ciphertext, key, cfg);

var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
var plaintext  = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);

var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
var plaintext  = CryptoJS.RC4.decrypt(ciphertext, key, cfg);

var cfg={
    iv: iv,
    mode:CryptoJS.mode.CBC,
    padding:CryptoJS.pad.Pkcs7,
    format:CryptoJS.format.Hex
};


var srcs = CryptoJS.enc.Hex.parse("2783726e20d0d334520cbbbb9cd95d9b");
//CryptoJS.enc.Base64.stringify(srcs);
var decryptdata = CryptoJS.AES.decrypt(
    CryptoJS.lib.CipherParams.create({ ciphertext: srcs}),
    key,
    cfg
);
decryptdata.toString(CryptoJS.enc.Utf8);
複製代碼
4.5加密模式

CBC ECB CFB OFB CTRGladman CTR

4.6填充方式

NoPadding ZeroPadding Pkcs7(Pkcs5) Iso10126 Iso97971 AnsiX923

4.7wordArray轉換到字符串
var string = wordArray + '';
var string = wordArray.toString();
var string = wordArray.ciphertext.toString();  //對稱加密算法裏有

var string = wordArray.toString(CryptoJS.enc.Utf8);
var string = wordArray.toString(CryptoJS.format.Hex);
var string = wordArray.toString(CryptoJS.format.Base64);
複製代碼
4.8另外的調用方式

SHA256

var hasher = CryptoJS.algo.SHA256.create();
hasher.reset();
hasher.update('message');
hasher.update(wordArray);
var hash = hasher.finalize();
var hash = hasher.finalize('message');
var hash = hasher.finalize(wordArray);
複製代碼

HmacSHA256

var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
hmacHasher.reset();
hmacHasher.update('message');
hmacHasher.update(wordArray);
var hmac = hmacHasher.finalize();
var hmac = hmacHasher.finalize('message');
var hmac = hmacHasher.finalize(wordArray);
複製代碼
4.9支持的其餘算法

RIPEMD160 HmacRIPEMD160

PBKDF2 CryptoJS.PBKDF2("22222222222", "str",{keySize: 8,iterations: 10})

EvpKDF CryptoJS.EvpKDF("22222222222", "str",{keySize: 8,iterations: 10})

RC4Drop Rabbit 加密用Rabbit 解密用RabbitLegacy RabbitLegacy 加密解密都用RabbitLegacy

相關文章
相關標籤/搜索