Ⅰ 如何使用CryptoJS的AES方法进行加密和解密
首先准备一份明文和秘钥:
var plaintText = 'aaaaaaaaaaaaaaaa'; // 明文
var keyStr = 'bbbbbbbbbbbbbbbb'; // 一般key为一个字符串
参看官网文档,AES方法是支持AES-128、AES-192和AES-256的,加密过程中使用哪种加密方式取决于传入key的类型,否则就会按照AES-256的方式加密。
CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key.
由于Java就是按照128bit给的,但是由于是一个字符串,需要先在前端将其转为128bit的才行。
最开始以为使用CryptoJS.enc.Hex.parse就可以正确地将其转为128bit的key。但是不然...
经过多次尝试,需要使用CryptoJS.enc.Utf8.parse方法才可以将key转为128bit的。好吧,既然说了是多次尝试,那么就不知道原因了,后期再对其进行更深入的研究。
// 字符串类型的key用之前需要用uft8先parse一下才能用
var key = CryptoJS.enc.Utf8.parse(keyStr);
由于后端使用的是PKCS5Padding,但是在使用CryptoJS的时候发现根本没有这个偏移,查询后发现PKCS5Padding和PKCS7Padding是一样的东东,使用时默认就是按照PKCS7Padding进行偏移的。
// 加密
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
由于CryptoJS生成的密文是一个对象,如果直接将其转为字符串是一个Base64编码过的,在encryptedData.ciphertext上的属性转为字符串才是后端需要的格式。
var encryptedBase64Str = encryptedData.toString();
// 输出:'+ot8JuxWVdLgY='
console.log(encryptedBase64Str);
// 需要读取encryptedData上的ciphertext.toString()才能拿到跟Java一样的密文
var encryptedStr = encryptedData.ciphertext.toString();
// 输出:''
console.log(encryptedStr);
由于加密后的密文为128位的字符串,那么解密时,需要将其转为Base64编码的格式。
那么就需要先使用方法CryptoJS.enc.Hex.parse转为十六进制,再使用CryptoJS.enc.Base64.stringify将其变为Base64编码的字符串,此时才可以传入CryptoJS.AES.decrypt方法中对其进行解密。
// 拿到字符串类型的密文需要先将其用Hex方法parse一下
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
// 将密文转为Base64的字符串
// 只有Base64类型的字符串密文才能对其进行解密
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
使用转为Base64编码后的字符串即可传入CryptoJS.AES.decrypt方法中进行解密操作。
// 解密
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
经过CryptoJS解密后,依然是一个对象,将其变成明文就需要按照Utf8格式转为字符串。
// 解密后,需要按照Utf8的方式将明文转位字符串
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
console.log(decryptedStr); // 'aaaaaaaaaaaaaaaa'
Ⅱ ruby中如何对字符串进行sha256加密
这两个属于不同的安全性,AES用于加密,SHA用于防篡改,这个得看你的应用场景才能得出哪种安全性高,
Ⅲ aes 128,192,256如何加密如何解密有没有在线工具在线加密,在线解密
....比如‘明文’用aes-ecb-256加密 zp填充 密码123 以utf8输出b64加密后就变成了‘/9+LAeoE=’解密就要反过来
所以你要知道你要解密的文件 加密方式 密码 填充 输出(二次加密) 和 编码 甚至还有偏移量所以 爆破?不存在的
Ⅳ SSL多位加密与AES加密有什么区别,那个更安全一点
你的问题中有概念问题,SSL和AES不是一种东西。
SSL是一种加密的通信协议 ,是协议 ,不是加密算法,SSL会用到多种加密算法
AES是一种对称加密算法。
SSL会同时使用非对称加密算法和对称加密算法。
在对称加密算法中,AES是加密强度最高的。在再高也不如非对称加密算法,如RSA、ECC的高
Ⅳ AES加密算法支持密钥key为多少位的
严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:
AES的区块长度固定为128位,密钥长度则可以是128,192或256位;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256位为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。
(5)rubyaes加密扩展阅读
AES加密模式
对称/分组密码一般分为流加密(如OFB、CFB等)和块加密(如ECB、CBC等)。对于流加密,需要将分组密码转化为流模式工作。对于块加密(或称分组加密),如果要加密超过块大小的数据,就需要涉及填充和链加密模式。
优点:1、简单;
2、有利于并行计算;
3、误差不会被传送;
缺点:
1、不能隐藏明文的模式;
2、可能对明文进行主动攻击;
3、因此,此模式适于加密小消息。
Ⅵ 如何确认加密方式为AES加密
在路由器的安全设置的加密方式中看有没有你所说的加密方式,如果有选择即可。
注意改变后计算机原来连接的无线网络必须删除后重新连接才能够连接上,否则它还一直使用原来的加密方式连接肯定就连接不上了。
Ⅶ AES加密真的破解不了么对方加密大概8个字符。
基本上可以理解为无法破解。
AES最低默认128位的密钥,也没有算法漏洞,最新的研究也仅仅是缩短3/1穷举的时间。一般介AES穷举的时间都是按照亿年为单位。
Ⅷ 请问AES加密 强度高不
密码学中的高级加密标准(Advanced Encryption Standard,AES),算法是美国联邦标准局于1997年开始向全世界征集的加密标准,属于对称加密算法,代表了当今最先进的编码技术。最终获胜的是RijnDael算法,其它符合标准的候选算法还有CAST256,MARS,RC6,Serpent,Twofish等。
完善的加密算法在理论上是无法破解的,除非使用穷尽法。使用穷尽法破解密钥长度在128位以上的加密数据是不现实的,仅存在理论上的可能性。统计显示,即使使用目前世界上运算速度最快的计算机,穷尽128位密钥也要花上几十亿年的时间,更不用说去破解采用256位密钥长度的AES算法了。
Ⅸ 跪求高人指点:AES加密算法密钥和明文都不足128位是该怎么处理
可以用随机数填充
Ⅹ AES算法到底可以加密多长的数据
这里你存在一个误区。秘钥可以是128位,但是密文是128的倍数,不一定就是128啊