详解nodejs与javascript中的aes加密

 更新时间:2016年05月22日 08:32:38   作者:西安王磊  
这篇文章主要为大家详细介绍了nodejs与javascript中aes加密的相关资料,感兴趣的朋友可以参考一下

一、简介

1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。高级加密标准已然成为对称密钥加密中最流行的算法之一。

2.AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB。

3.在这里我们只接受常用的ECB方式 + pkcs7padding(与pkcs5padding值相同)填充加密。 

二、应用

1.nodejs中aes的使用

var crypto = require('crypto');

var aesutil = module.exports = {};

/**
 * aes加密
 * @param data 待加密内容
 * @param key 必须为32位私钥
 * @returns {string}
 */
aesutil.encryption = function (data, key, iv) {
 iv = iv || "";
 var clearEncoding = 'utf8';
 var cipherEncoding = 'base64';
 var cipherChunks = [];
 var cipher = crypto.createCipheriv('aes-256-ecb', key, iv);
 cipher.setAutoPadding(true);
 cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding));
 cipherChunks.push(cipher.final(cipherEncoding));
 return cipherChunks.join('');
}

/**
 * aes解密
 * @param data 待解密内容
 * @param key 必须为32位私钥
 * @returns {string}
 */
aesutil.decryption = function (data, key, iv) {
 if (!data) {
  return "";
 }
 iv = iv || "";
 var clearEncoding = 'utf8';
 var cipherEncoding = 'base64';
 var cipherChunks = [];
 var decipher = crypto.createDecipheriv('aes-256-ecb', key, iv);
 decipher.setAutoPadding(true);
 cipherChunks.push(decipher.update(data, cipherEncoding, clearEncoding));
 cipherChunks.push(decipher.final(clearEncoding));
 return cipherChunks.join('');
}
 

2.javascript中aes的使用

下载第三方库Crypto-js.js git地址:https://github.com/brix/crypto-js

引入src下的crypto-js.js,加密代码如下:

var key = "12345678"  //秘钥必须为:8/16/32位
var message = "123456";

//加密
var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(key), {
 mode: CryptoJS.mode.ECB,
 padding: CryptoJS.pad.Pkcs7
});
console.log("value: "+encrypt);

//解密
var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(key), {
 mode: CryptoJS.mode.ECB,
 padding: CryptoJS.pad.Pkcs7
});
console.log("value: "+decrypt.toString(CryptoJS.enc.Utf8));

原文作者:西安.王磊
原文出处:http://vipstone.cnblogs.com/

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

  • 非常全面的12种js数组去重的方法

    非常全面的12种js数组去重的方法

    数组的去重方法,其实无论实在实际项目还是在面试中都会有用到的,下面这篇文章主要给大家介绍了非常全面的12种js数组去重的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • JavaScript运动框架 解决速度正负取整问题(一)

    JavaScript运动框架 解决速度正负取整问题(一)

    这篇文章主要为大家详细介绍了JavaScript运动框架的第一部分,解决速度正负取整问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • webpack打包主要流程以及优化

    webpack打包主要流程以及优化

    这篇文章主要介绍了Webpack是一个强大的前端构建工具,通过配置文件和一系列的插件和加载器,它可以将项目中的模块打包成适合生产环境的文件,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • uni-app实现数据下拉刷新功能实例

    uni-app实现数据下拉刷新功能实例

    很多列表页总数量很大,一次性查询加载会导致页面有很长时间的空白期,自然体验感极差,就会使用分页加载数据,这篇文章主要给大家介绍了关于uni-app实现数据下拉刷新功能实例的相关资料,需要的朋友可以参考下
    2022-08-08
  • JavaScript实现解析INI文件内容的方法

    JavaScript实现解析INI文件内容的方法

    这篇文章主要介绍了JavaScript实现解析INI文件内容的方法,结合实例形式分析了javascript通过自定义函数实现针对ini文件解析操作的相关处理技巧,需要的朋友可以参考下
    2016-11-11
  • 英文首字母全大写的js实现脚本

    英文首字母全大写的js实现脚本

    输入内容活直接点转换即可,讲单词的首字母大写。
    2008-09-09
  • 微信小程序分包加载的实现代码

    微信小程序分包加载的实现代码

    分包加载是一种小程序优化技术,将小程序不同功能的代码,分别打包成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载,在构建小程序分包项目时,构建会输出一个或多个分包,这篇文章主要介绍了微信小程序---分包加载,需要的朋友可以参考下
    2024-07-07
  • JS实现不用中间变量temp 实现两个变量值得交换方法

    JS实现不用中间变量temp 实现两个变量值得交换方法

    这篇文章主要介绍了在JS中 实现不用中间变量temp 实现两个变量值得交换 ,需要的朋友可以参考下
    2018-02-02
  • js验证账户名是否重复

    js验证账户名是否重复

    这篇文章主要为大家详细介绍了js验证账户名是否重复,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • 查找Oracle高消耗语句的方法

    查找Oracle高消耗语句的方法

    这篇文章主要介绍了查找Oracle高消耗语句的方法,需要的朋友可以参考下
    2014-03-03

最新评论