常見加密算法


js常見的加密方式

常見的加密算法基本分為幾類

  • 線性散列算法(簽名算法)MD5
  • 對稱性加密算法AES DES
  • 非對稱性加密算法 RSA
Md5加密

MD5是一種被廣泛使用的線性散列算法,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整的一致性。且MD5加密之后產生的是一個固定長度(32位或16位)的數據。

一般登錄密碼使用MD5加密

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script>
<script type="text/javascript">
    var hashCode = md5("I am tian")
    alert(hashCode)

</script>
</body>
</html>
AES 、DES對稱加密

DES數據加密標准,是一種使用密鑰加密的算法,該加密算法是一種對稱加密方式,其加密運算、解密運算需要使用的是同樣的密匙(一組字符串)

AES和DES的區別:

加密后密文長度不同:

  • DES加密后密文長度是8的整數倍
  • AES加密后密文長度是16的整數倍

應用場景不同:

  • 企業級開發使用DES足夠安全
  • 如果要求高使用AES

DES算法的入口參數有三個:Key、Data、Mode 、padding

  • Key為7個字節共56位,是DES算法的工作秘鑰;
  • Data為8個字節64位,是要被加密或被解密的數據;
  • Mode為DES的工作方式
  • padding為填充模式,如果加密后密文長度如果達不到指定整數倍(8個字節、16個字節),填充對應字符
  • padding的賦值固定為CryptoJS.pad.Pkcs7即可
  • 使用DES/AES進行數據交換時要求雙方都擁有相同的私鑰。
<!DOCTYPE html>
<html lang="en">
<script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
<script type="text/javascript">
    var aseKey = "123456"; //定制私鑰,長度必須為:8/16/32位
    var message = "tian"; // 加密的數據
    // 加密DES/AES切換只需要修改CryptoJS.AES <==> CryptoJS.DES
    var encrypt = CryptoJS.DES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    }).toString();
    alert(encrypt)

    //解密 關鍵字DES.decrypt()
    var decrypt = CryptoJS.DES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);
    alert(decrypt); //密碼
</script>
</html>
RSA加密

RSA加密算法是一種非對稱加密算法。

非對稱加密算法:

  • 非對稱加密算法需要兩個密鑰:
  • 公開密鑰(publickey簡稱公鑰)
  • 私有密鑰(privatekey簡稱私鑰)
  • 公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法

注意:

使用時都是使用公鑰加密使用私鑰解密。公鑰可以公開,私鑰自己保留。

使用流程和場景介紹

通過公鑰加密,使用私鑰解密。私鑰是通過公鑰計算生成的。假設ABC三方之間相互要進行加密通信。大家相互之間使用公鑰進行信息加密,信息讀取時使用各自對應的私鑰進行信息解密。

公鑰私鑰生成方式:

公私鑰可以在線生成:http://web.chacuo.net/netrsakeypair

<!DOCTYPE html>
<html lang="en">
<script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script>
<script type="text/javascript">
    //公鑰
    var PUBLIC_KEY = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrAHrJgeFRyaj0aQNHHZRvVeEW\n' +
        'sOnIHqb98rPWeXM9uoA1adanAqy++vLsLZ76YUyk1qpwVZdvWLbwReK3/aehhWrl\n' +
        'm8SYUStHwKsBa3PkhLU4xADzYddSMdlhoJJv+scmuFj88x7FpK97WYZU1O1MiGZl\n' +
        'lUTbo46LwUQtuy7+GQIDAQAB';
    // 私鑰
    var PRIVATE_KEY = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOsAesmB4VHJqPRp\n' +
        'A0cdlG9V4Raw6cgepv3ys9Z5cz26gDVp1qcCrL768uwtnvphTKTWqnBVl29YtvBF\n' +
        '4rf9p6GFauWbxJhRK0fAqwFrc+SEtTjEAPNh11Ix2WGgkm/6xya4WPzzHsWkr3tZ\n' +
        'hlTU7UyIZmWVRNujjovBRC27Lv4ZAgMBAAECgYBOaf6OtpPkopGJ3HCHjks1S0as\n' +
        'N6QKbo/yNMXlTukxM8YMDKDfYXka0Mm2HRLrIQReDHMawLSjJssEKY2ZLz57dy0I\n' +
        'tHHSBJ6RveGjGOQFZqKfblF60bKis9nYzJfIDY46mzII6u4FG8e8bp3/UvGlZ9Px\n' +
        'fh5A1eXOhJF99WYcAQJBAP3IJrGCvOXx1KIBNXuySiC25RevY0lykzTft4aS9sGE\n' +
        'qjHRZia87emMznWZl3rPA4RveVgyHU7WRGLUI4WHELkCQQDtDk6zoMrQUNXTF7vM\n' +
        'dZ+ynV86bRVfdYFV5GXM0jtNsjZc5Lm4NmMoswnoKFOzW6upVvLFJ1v+Y0iy9Y8p\n' +
        'quhhAkAXkip93D29QbvVHDWieonGBha7H3AiV0Dy7UB3gFjo2nCQVfmd6XhTc9+N\n' +
        'LqnSHz4dY9kqZuUv+Fi7sSZndYcJAkAuzGZJG/MuEOdFlyfiA06Vqm/ETwirIb14\n' +
        'wXA/cTl36zjEOftYHJSS0lWgWWW8wNowwhOHTG/i1qLhgYzTwwPBAkEAwYI0hk4e\n' +
        'WRgAxitf/FICc23nJhIgODniHNsp3zuUQJxDlFYI0E7jRcTr4/ir22eA1IVpGNt/\n' +
        '3HrpUB0E1zx6lg==';
    // 使用公鑰加密
    var encrypt = new JSEncrypt(); // 實例化加密對象
    encrypt.setPublicKey(PUBLIC_KEY); // 設置公鑰
    var encrypted = encrypt.encrypt('hello tian'); // 對指定數據進行加密
    alert(encrypted);

    // 使用私鑰解密
    var decrpyt = new JSEncrypt();
    decrpyt.setPrivateKey(PRIVATE_KEY); //設置私鑰
    var uncrypted = decrpyt.decrypt(encrypted);// 解密
    alert(uncrypted);


</script>

</html>
base64偽加密

Base64是一種用64個字符來表示任意二進制數據的方法。base64是一種編碼方式而不是加密算法。只是看上去像是加密而已,‘’

Base64使用A-Z, a-z , 0-9 , +, / 這64個字符實現對數據進行加密。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM