zoukankan      html  css  js  c++  java
  • nodejs中aes-128-cbc加密和解密

    和java程序进行交互的时候,java那边使用AES 128位填充模式:AES/CBC/PKCS5Padding加密方法,在nodejs中采用对应的aes-128-cbc加密方法就能对应上,因为有使用向量(iv),所以nodejs中要用createCipheriv方法,而不是createCipher。

    在这类加密和解密的计算中,最最要注意的就是中文编码问题,不然铁定采坑。我踩完坑了,把能跑的代码发上来下,运行环境nodejs 4.4.6。

    var crypto = require('crypto');
     
    /**
     * 加密方法
     * @param key 加密key
     * @param iv       向量
     * @param data     需要加密的数据
     * @returns string
     */
    var encrypt = function (key, iv, data) {
        var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
        var crypted = cipher.update(data, 'utf8', 'binary');
        crypted += cipher.final('binary');
        crypted = new Buffer(crypted, 'binary').toString('base64');
        return crypted;
    };
     
    /**
     * 解密方法
     * @param key      解密的key
     * @param iv       向量
     * @param crypted  密文
     * @returns string
     */
    var decrypt = function (key, iv, crypted) {
        crypted = new Buffer(crypted, 'base64').toString('binary');
        var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
        var decoded = decipher.update(crypted, 'binary', 'utf8');
        decoded += decipher.final('utf8');
        return decoded;
    };
     
    var key = '751f621ea5c8f930';
    console.log('加密的key:', key.toString('hex'));
    var iv = '2624750004598718';
    console.log('加密的iv:', iv);
    var data = "Hello, nodejs. 演示aes-128-cbc加密和解密";
    console.log("需要加密的数据:", data);
    var crypted = encrypt(key, iv, data);
    console.log("数据加密后:", crypted);
    var dec = decrypt(key, iv, crypted);
    console.log("数据解密后:", dec);

    运行输出结果:

    加密的key: 751f621ea5c8f930
    加密的iv: 2624750004598718
    需要加密的数据: Hello, nodejs. 演示aes-128-cbc加密和解密
    数据加密后: 7L/q8ZzHLaNI1ToA/RA9b/eznGIYtO9dhTqoo105bNtsTo/QOoCTyljNy6DvU1X+
    数据解密后: Hello, nodejs. 演示aes-128-cbc加密和解密

     原文:http://www.01happy.com/nodejs-aes-128-cbc/

  • 相关阅读:
    Linux命令备忘录
    Redis集群部署
    Java BIO、NIO、AIO 学习
    elasticsearch性能因素总结
    tomcat配置文件server.xml详解
    Tomcat性能优化及JVM内存工作原理
    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
    HttpClient使用学习
    Java的三种代理模式
    yzoi1109&&viojs1042最小步数的一点看法——回文数
  • 原文地址:https://www.cnblogs.com/toward-the-sun/p/6783765.html
Copyright © 2011-2022 走看看