• JavaScript:加密与解密


    目前原生JS貌似并没有提供MD5计算相关的函数方法,只能自己实现或者使用前辈大神写好的。

    一、使用crypto.js库进行加密

    GitHub的 https://github.com/brix/crypto-js 上下载该js。

    它可以单独引入所需要加密方式的js;也可以引入一个crypto-js.js 这个文件,它相当于引入了所有的加密方式。

    用法:

    <script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>
    <script type="text/javascript">
        var encrypted = CryptoJS.AES(...);
        var encrypted = CryptoJS.SHA256(...);
    </script>

    1、举例:

    Hash加密:

    //加密实例一
      console.log("加密结果一 MD5:"+CryptoJS.MD5("你好")); 
      
    //加密实例二  
    var pwd="passwor";
    console.log("加密结果二 Hmac-MD5:   "+CryptoJS.HmacMD5("你好",pwd));

    AES对称加密:

    普通文本加密

    // 加密
    var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();
    
    // 解密
    var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
    var originalText = bytes.toString(CryptoJS.enc.Utf8);
    
    console.log(originalText); // 'my message'

    对象加密

    var data = [{id: 1}, {id: 2}]
    
    // 加密
    var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123').toString();
    
    // 解密
    var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
    var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
    
    console.log(decryptedData); // [{id: 1}, {id: 2}]

    Custom Key and IV

    var key = CryptoJS.enc.Utf8.parse('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); //密钥 
    var iv  = CryptoJS.enc.Utf8.parse('1234567812345678');
    // 加密
    var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });

    // 解密
    var decrypted =CryptoJS.AES.decrypt(encrypted,key,
            {
                iv:iv,
                mode:CryptoJS.mode.CBC,
                padding:CryptoJS.pad.Pkcs7
            });
    var originalText = decrypted.toString(CryptoJS.enc.Utf8); 

    Block Modes and Padding

    var key  = CryptoJS.enc.Utf8.parse('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');  //密钥 
    var iv   = CryptoJS.enc.Utf8.parse('1234567812345678');
    var encrypted =CryptoJS.AES.encrypt("Message", ,key,
            {
                iv:iv,
                mode:CryptoJS.mode.CBC,
                padding:CryptoJS.pad.Pkcs7
            }); //返回的是base64格式的密文

    2、API

    See: https://cryptojs.gitbook.io/docs/

    编码工具:

    var words = CryptoJS.enc.Base64.parse("SGVsbG8sIFdvcmxkIQ==");
    ​var base64 = CryptoJS.enc.Base64.stringify(words);
    ​
    var words = CryptoJS.enc.Hex.parse("48656c6c6f2c20576f726c6421");
    ​var hex = CryptoJS.enc.Hex.stringify(words);
    ​
    var words = CryptoJS.enc.Utf8.parse("");
    ​var utf8 = CryptoJS.enc.Utf8.stringify(words);

    二、使用JavaScript-MD5库进行加密

    GitHub的 https://github.com/blueimp/JavaScript-MD5  上下载该js。

    举例:

    Calculate the (hex-encoded) MD5 hash of a given string value:

    var hash = md5('value') // "2063c1608d6e0baf80249c42e2be5804"
    var v1= md5('{"name":"嘻嘻嘻嘻嘻嘻嘻嘻嘻","age":22}'); //56b21847ed32d2d96cf74077b22342eb

    Calculate the (hex-encoded) HMAC-MD5 hash of a given string value and key:

    var hash = md5('value', 'key') // "01433efd5f16327ea4b31144572c67f6"

    Calculate the raw MD5 hash of a given string value:

    var hash = md5('value', null, true)

    Calculate the raw HMAC-MD5 hash of a given string value and key:

    var hash = md5('value', 'key', true)
  • 相关阅读:
    jstree 实现异步加载子节点
    创建 widget 窗口小组件
    Android(permission)常用权限
    Android 之 补间动画
    补间动画之 AlphaAnimation
    (转)向对象开发与面向组件开发的区别
    Android Drawable文件夹对应像素密度
    Notification(通知) 简单用法
    AlarmManager 用法
    关于IntentService 用法
  • 原文地址:https://www.cnblogs.com/springsnow/p/12557745.html
Copyright © 2020-2023  润新知