欢迎来到赛兔子家园

常见加密算法

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个字符实现对数据进行加密。

 

posted on 2021-08-08 22:03  赛兔子  阅读(640)  评论(0编辑  收藏  举报

导航