摘要:
大部分動態網站都支持從客戶端到服務器傳遞數據,如果傳遞的數據被別人截取就非常危險,尤其是一些用戶名密碼之類的。這時候就需要我們在傳遞數據之前對數據進行加密。現在的加密算法已經有很多了,例如:MD5,SHA-1,SHA-256,AES,Rabbit,MARC4,HMAC等等。下面分享幾款前端加密的插件。
- braintree.js
它是設計用於與客戶端的庫。加密庫將數據(通常是在一個移動設備或merchant-hosted網站通過表單提交)和加密使用非對稱密鑰對的公鑰提交。在服務器上,使用客戶端發送加密數的公鑰。
1 var clientSideEncryptionKey = "YOUR_ENCRYPTION_KEY"; 2 var braintree = Braintree.create(clientSideEncryptionKey); 3 $(#transaction_form).submit(function() { 4 encryptedForm().submit(); 5 return false; 6 });
- BurningPig-encryption
使用RSA算法進行加密
1 var rsa = require("./src/rsa.js"); 2 var key = new rsa.Key(); 3 4 var message = "All your bases are belong to us."; 5 console.log("Message:\n"+message+"\n"); 6 7 // Generate a key 8 key.generate(1024, "10001"); 9 console.log("Key:\n"); 10 console.log("n:" + key.n.toString(16)); 11 console.log("e:" + key.e.toString(16)); 12 console.log("d:" + key.d.toString(16)); 13 console.log("\n"); 14 15 // Encrypt 16 var encrypted = key.encrypt(message); 17 console.log("Encrypted:\n" + rsa.linebrk(encrypted, 64) + "\n" ); 18 19 // Decrypt 20 var decrypted = key.decrypt(encrypted); 21 console.log("Decrypted:" + rsa.linebrk(decrypted, 64) + "\n"); 22 23 var sig = key.signString(message, "sha256"); 24 console.log("String signature: \n" + rsa.linebrk(sig, 64)); 25 26 var pubkey = new rsa.Key(); 27 pubkey.n = key.n; 28 pubkey.e = key.e; 29 30 var verified = pubkey.verifyString(message, sig); 31 32 console.log("Verfied: " + verified);
- MD5
項目中使用的就是這個插件。
1 // quick test 2 var input1 = "ABC"; 3 var input2 = ["A","B","C"]; 4 var input3 = [0x41, 0x42, 0x43]; 5 alert(faultylabs.MD5(input1) == "902FBDD2B1DF0C4F70B4A5D23525E932"); 6 alert(faultylabs.MD5(input2) == "902FBDD2B1DF0C4F70B4A5D23525E932"); 7 alert(faultylabs.MD5(input3) == "902FBDD2B1DF0C4F70B4A5D23525E932"); 8 9 // ArrayBuffer 10 var abuf = new ArrayBuffer(3) 11 var vu8 = new Uint8Array(abuf) 12 vu8[0] = 0x41; vu8[1] = 0x42; vu8[2] = 0x43 13 alert(faultylabs.MD5(abuf) == "902FBDD2B1DF0C4F70B4A5D23525E932") 14 15 // Typed Array Uint32Array 16 var au32 = new Uint32Array(1) 17 au32[0] = 0xDDCCBBAA 18 alert(faultylabs.MD5(au32) == "CA6FFBF95B47864FD4E73F2601326304")
- crypto.js
是一個綜合的庫,包含很多算法,MD5,SHA-1,SHA-256,AES,Rabbit,MARC4,HMAC,HMAC-MD5,HMAC-SHA1,HMAC-SHA256,PBKDF2
1 var CryptoJS = require("crypto-js"); 2 console.log(CryptoJS.HmacSHA1("Message", "Key"));
- sjcl
1 sjcl.encrypt("password", "data") 2 sjcl.decrypt("password", "encrypted-data")
- jcryption
在正常情況下,當提交數據時,如果沒有SSL數據將使用純文本的方式發送。jCryption這個jQuery插件能夠加密由Forms提交的POST/GET數據。jCryption使用RSA公鑰密碼算法加密,該項目還提供一個PHP文件來處理數據的解密。
1 $(function() { 2 $("form").jCryption(); 3 });
- jshashes
jshashes是一個純JavaScript實現的擴展散列算法。它的目標是提供一個獨立的、快速和簡單的散列算法解決方案對客戶端和服務器端都是JavaScript環境的。包括算法:MD5,SHA-1,SHA-256,SHA-512,HMAC,RIPEMD-160
1 // new MD5 instance 2 var MD5 = new Hashes.MD5; 3 // new SHA1 instance 4 var SHA1 = new Hashes.SHA1; 5 // new SHA256 instance 6 var SHA256 = new Hashes.SHA256; 7 // new SHA512 instace 8 var SHA512 = new Hashes.SHA512; 9 // new RIPEMD-160 instace 10 var RMD160 = new Hashes.RMD160; 11 // sample string 12 var str = 'Sample text!'; 13 // output to console 14 console.log('MD5: ' + MD5.hex(str)); 15 console.log('SHA1: ' + SHA1.hex(str)); 16 console.log('SHA256: ' + SHA256.hex(str)); 17 console.log('SHA512: ' + SHA512.hex(str)); 18 console.log('RIPEMD-160: ' + RMD160.hex(str));
小結:
網上也有很多關於數據加密的,大部分思路是使用非對稱加密方法,如果你有好的方法可以多多交流。
另外附上兩個在node.js環境上加密解密的插件:
https://github.com/gwjjeff/cryptojs
https