CryptoJS中AES256(CBC)加密算法简单使用

###1.CryptoJS脚本下载
下载地址:http://pan.baidu.com/s/1slwHVLb

这里写图片描述


###2.WordArray (An array of 32-bit words.)
使用AES加密前,先了解下WordArray,我把它理解成CryptoJS中定义的 新的 数据类型,叫“单词数组”。

2.1 : 初始化

var wordArray = CryptoJS.lib.WordArray.create();//创建一个空的 WordArray对象

2.2 : WordArray 对象 —>16进制字符串

 var string = wordArray.toString();//默认CryptoJS.enc.Hex,即16进制字符串
 var string = wordArray.toString(CryptoJS.enc.Utf8);//utf-8字符串

2.3 : 16进制字符串 —>WordArray对象

var wordArray = CryptoJS.enc.Hex.parse(hexString);

2.4 : WordArray对象—>utf8字符串

var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
//等价于2.2中 wordArray.toString(CryptoJS.enc.Utf8);

2.5 : utf8字符串—>WordArray对象

 var wordArray = CryptoJS.enc.Utf8.parse(utf8String);

2.6 : WordArray对象—>Base64字符串

var base64String = CryptoJS.enc.Base64.stringify(wordArray);

2.7 : Base64字符串—>WordArray对象

var wordArray = CryptoJS.enc.Base64.parse(base64String);

###3.简单使用

<script src="<%=request.getContextPath()%>/js/cryptojs/crypto-js.js"></script>
<script>
var message = "1_2_3_4_5_6_7_8_9_0";//utf8字符串,待加密

var iv = CryptoJS.lib.WordArray.random(128 / 8).toString(CryptoJS.enc.Hex);//随机生成长度为32的16进制字符串。IV称为初始向量,不同的IV加密后的字符串是不同的,加密和解密需要相同的IV。

var key = "0321ebeba1f75de2d3cd3471af7418a4";//秘钥。长度32的16进制字符串。
var cryptkey  = CryptoJS.enc.Hex.parse(key);//将16进制字符串转换为 WordArray对象
//或者 
//var key = "qwertyuiopasdfgh";//长度16的utf8字符串
//var cryptkey =  CryptoJS.enc.Utf8.parse(key);//将utf8字符串转换为 WordArray对象
//重点是 key要转换为WordArray对象,加密时要用。

//测试
var ciphertext = aesEncrypt(message,cryptkey,iv);//加密
var decryptedMessage = aesDecrypt(ciphertext,cryptkey,iv);//解密
alert(decryptedMessage);//1_2_3_4_5_6_7_8_9_0
</script>
<script>
//** 加密 **
//var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
//params: 注意参数key为WordArray对象
//return: 密码对象 或者 密码对象Base64字符串
function aesEncrypt(message,key,iv){
	var ciphertext = CryptoJS.AES.encrypt(message, key, {	
		iv: CryptoJS.enc.Hex.parse(iv),
		mode: CryptoJS.mode.CBC,
		padding:CryptoJS.pad.Pkcs7 
 	});
	return ciphertext;//密码对象(Obejct类型,非WordArray类型),Base64编码。
	//return ciphertext.toString();//密码对象的Base64字符串

}

//** 解密 **
//var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);
//params: 注意参数ciphertext 必须为 Base64编码的对象或者字符串。
function aesDecrypt(ciphertext,key,iv){
	var decrypted = CryptoJS.AES.decrypt(ciphertext,key,{ 
        iv: CryptoJS.enc.Hex.parse(iv),
        mode: CryptoJS.mode.CBC,
        padding:CryptoJS.pad.Pkcs7 
    });
	return decrypted.toString(CryptoJS.enc.Utf8);//WordArray对象转utf8字符串
}

</script>

###4.延伸
AES加密函数 返回值为 加密对象ciphertext,其属性:

  •     ciphertext: ciphertextWordArray,
    
  •     key: keyWordArray,
    
  •     iv: ivWordArray,
    
  •     algorithm: CryptoJS.algo.AES,
    
  •     mode: CryptoJS.mode.CBC,
    
  •     padding: CryptoJS.pad.PKCS7,
    
  •     blockSize: 4,
    
  •     formatter: CryptoJS.format.OpenSSL
    

属性ciphertext即 密文,可以发现,其为WordArray类型。通过 加密对象.属性名 取值。

function aesEncrypt(message,key,iv){
	var ciphertext = CryptoJS.AES.encrypt(message, key, {	
		iv: CryptoJS.enc.Hex.parse(iv),
		mode: CryptoJS.mode.CBC,
		padding:CryptoJS.pad.Pkcs7 
 	});
	return CryptoJS.enc.Base64.stringify(ciphertext.ciphertext);//密文 转 Base64字符串
}

//解密函数 稍有改动。
function aesDecrypt(crypted,key,iv){
	var decrypted = CryptoJS.AES.decrypt({ciphertext: CryptoJS.enc.Base64.parse(crypted)},key,{ 
        iv: CryptoJS.enc.Hex.parse(iv),
        mode: CryptoJS.mode.CBC,
        padding:CryptoJS.pad.Pkcs7 
    });
	return decrypted.toString(CryptoJS.enc.Utf8);
}

###4.总结

很多都是自己的理解,希望不会有大的偏差。最近这个项目,遇到了AES加密,才有所了解。真是路漫漫其修远兮啊。。。

加密实战:紫美雅和1紫美雅和2

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值