前端提交數據到后台,如果不適用https協議,則提交的數據就有被第三者竊取的可能。前端使用js來編碼數據主要分為以下三種:
1、摘要算法
2、對稱加密
3、非對稱加密
下面分別介紹三種算法中對應的一個實例,並給出js實現例子。
MD5(摘要算法)
百度百科
javascript實現
實現官網
http://pajhome.org.uk/crypt/md5/index.html
網站介紹用途:
1、保護明文密碼,將密碼經過MD5函數換算為 128bit的 散列值。
2、生成密碼,用戶使用統一的密碼,同時添加上域名,計算出MD5散列值,用於各個網站的密碼。
3、生成自解密文檔,生成的文檔,可以嵌入html網頁,任何用戶都可以訪問此網頁, 但是只有用戶輸入正確的密碼才能看到網頁原貌。http://pajhome.org.uk/crypt/md5/uses.html#sdp
下載網站
http://pajhome.org.uk/crypt/md5/scripts.html
下載鏈接
http://pajhome.org.uk/crypt/md5/jshash-2.2.zip
此庫同時實現的散列摘要算法
MD5 | Source | ![]() |
---|---|---|
RIPEMD-160 | Source | ![]() |
SHA-1 | Source | ![]() |
SHA-256 | Source | ![]() |
SHA-512 | Source | ![]() |
HMAC |
實驗code
<html> <head> <script src="md5.js" type=text/javascript></script> </head> <body> <label>"I love you" MD5 value = </label><span id="md5control"></span> <script type=text/javascript> hash = hex_md5("I love you"); //產生的hash變量就是"input string"的md5值,用在表單提交時 document.getElementById("md5control").innerText = hash; </script> </body> </html>
網頁輸出:
e4f58a805a6e1fd0f6bef58c86f9ceb3
AES(對稱加密)
加密強度高於DES的對稱加密方法,使用同一個密鑰實現, 加密和解密。
實現官網:
http://point-at-infinity.org/jsaes/
網站例子和解釋:
http://people.eku.edu/styere/Encrypt/JS-AES.html
AES was designed to be efficient in both hardware and software, and supports a block length of 128 bits and key lengths of 128, 192, and 256 bits
測試代碼:
<html> <head> <script src="jsaes.js" type=text/javascript></script> </head> <body> <label>"00 11 22 .. EE FF" AES value = </label><span id="AEScontrol"></span> <br/> <label>decrypted value = </label><span id="decryptedValue"></span> <script type=text/javascript> //The following code example enciphers the plaintext block '00 11 22 .. EE FF' with the 256 bit key '00 01 02 .. 1E 1F'. AES_Init(); var block = new Array(16); for(var i = 0; i < 16; i++) block[i] = 0x11 * i; //生成128位密鑰 var key = new Array(32); for(var i = 0; i < 32; i++) key[i] = i; AES_ExpandKey(key); AES_Encrypt(block, key); document.getElementById("AEScontrol").innerText = block; AES_Done(); //下面對加密后的block進行解密 AES_Init(); //生成128位密鑰 var key = new Array(32); for(var i = 0; i < 32; i++) key[i] = i; AES_ExpandKey(key); AES_Decrypt(block, key); document.getElementById("decryptedValue").innerText = block; AES_Done(); </script> </body> </html>
網頁輸出:
142,162,183,202,81,103,69,191,234,252,73,144,75,73,96,137
0,17,34,51,68,85,102,119,136,153,170,187,204,221,238,255
RSA(非對稱加密)
介紹
http://pajhome.org.uk/crypt/rsa/index.html
非對稱加密,采用公鑰進行加密,私鑰進行解密。
實現網站與使用介紹
https://github.com/travist/jsencrypt
下載:
http://travistidwell.com/jsencrypt/
在線演示demo:
http://travistidwell.com/jsencrypt/example.html
實驗:
私鑰
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----
公鑰
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4
gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----
精簡代碼:
<!DOCTYPE html> <html> <head> <title>JSEncrypt Example</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="jquery.js"></script> <script type="text/javascript" src="bin/jsencrypt.js"></script> </head> <body> <div class="container"> <label>"I love you" RSA PUBLIC ENCRYPTED value = </label><br/> <textarea id="RSAcontrol" rows="15" cols="65"> </textarea> <br/> <label>decrypted value = </label><span id="decryptedValue"></span> <br/> <br/> <br/> <label for="privkey">Private Key</label><br/> <textarea id="privkey" rows="15" cols="65">-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd 8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5 rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876 -----END RSA PRIVATE KEY-----</textarea><br/> <label for="pubkey">Public Key</label><br/> <textarea id="pubkey" rows="15" cols="65">-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76 xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4 gwQco1KRMDSmXSMkDwIDAQAB -----END PUBLIC KEY-----</textarea><br/> <script type="text/javascript"> // Call this code when the page is done loading. $(function() { // Encrypt with the public key... var encrypt = new JSEncrypt(); encrypt.setPublicKey($('#pubkey').val()); var encrypted = encrypt.encrypt("I love you"); document.getElementById("RSAcontrol").innerText = encrypted; // Decrypt with the private key... var decrypt = new JSEncrypt(); decrypt.setPrivateKey($('#privkey').val()); var uncrypted = decrypt.decrypt(encrypted); document.getElementById("decryptedValue").innerText = uncrypted; }); </script> </div> </body> </html>
網頁輸出:
4Bgtqo6qfIZKC97wdc89aph9FrJRDqzU71BrSaoiYp/G6tUG8L5bv9/6xmD5eMDbviwVNOKPveRsQcbpCBOOKqSx50SwnnHTm0TwFaNex9h3ldV4XLyl3+OjWGdNFLaq/OCdNbZ0B+xPDlQTw+UZn1PR3FRSzpgHwQNkuEGhsYA=
I love you
公鑰和私鑰生成器:
命令行生成:
https://github.com/travist/jsencrypt
http://help.alipay.com/support/help_detail.htm?help_id=397433