CryptoJS中俄歇电子能谱实现前后端通用加解密技术
在项目中如果要对前后端传输的数据双向加密,比如避免使用明文传输用户名,密码等数据。就需要对前后端数据用同种方法进行加密,方便解密。这里介绍使用CryptoJS实现俄歇电子能谱加解密。
首先需要下载前台使用CryptoJS实现俄歇电子能谱加解密的,所以要先下载组件,下载CryptoJS-v3.1.2版本之后,文件中包含成分和卷起两个文件夹,组件文件夹下是单个组件,卷起文件夹下是汇总,引用卷起下的aes.js文件即可。
已解决解密数据时出现的异常:异常:使用填充密码解密时,输入长度必须是16的倍数
这里提供CryptoJS-v3.1.2的开源代码库链接
先上后台爪哇代码:
包裹。com。公司。经前综合症。经前综合症基地。utils导入javax。密码。密码;导入javax。密码。规格。iv参数规格;导入javax。密码。规格。secretkeyspec导入组织。阿帕奇。公地。编解码器。二进制。底座64;公共类AesUtil {公共静态void main(字符串参数[])引发异常{字符串内容='明文123 ABC ';//加密字符串加密=加密(内容,KEY,IV);//解密字符串解密=解密(加密,KEY,IV);System.out.println('加密前:' '内容);System.out.println('加密后:' '已加密);System.out.println('解密后:' '已解密);}私有静态String KEY=' abcdef0123456789//长度必须是16私有静态字符串IV=' abcdef0123456789//长度必须是16 /** * 加密返回的数据转换成线类型* @param内容明文* @param键秘钥* @param iv初始化向量是16位长度的字符串* @返回* @引发异常*/公共静态字符串加密(字符串内容、字符串密钥、字符串引发异常{ //将返回的加密过的字节[]转换成Base64编码字符串!很关键返回base64字符串(AES _ CBC _ Encrypt(内容。getbytes()、key.getBytes()、iv。getbytes()));} /** * 将解密返回的数据转换成线类型* @param内容Base64编码的密文* @param键秘钥* @param iv初始化向量是16位长度的字符串* @返回* @抛出异常*/公共静态字符串解密(字符串内容,字符串键字符串iv)抛出异常{ //stringToBase64()将Base64编码的字符串转换成字节[]!与base64字符串()配套使用返回新字符串(AES _ CBC _ Decrypt(stringtobase 64(content),key.getBytes(),iv。getbytes()));}私有静态字节[] AES_CBC_Encrypt(字节[]内容,字节[] keyBytes,字节[]iv){ 0尝试{ secretkey spec密钥=新的secretkey spec(密钥字节,‘AES’);密码=密码。getinstance(' AES/CBC/pkcs5填充');密码初始化(密码加密模式,密钥,新的ivParameter spec(iv));字节[]结果=cipher.doFinal(内容);返回结果;}捕获(例外e){系统。出去。println(' Exception : ' e . tostring());}返回null}私有静态字节[] AES_CBC_Decrypt(字节[]内容,字节[] keyBytes,字节[]iv){ 0尝试{ SecretKeySpec密钥=new secretkeysec(KeyBytes,‘AES’);密码=密码。getinstance(' AES/CBC/pkcs5填充');密码初始化(密码解密模式,密钥,新的ivParameter spec(iv));字节[]结果=cipher.doFinal(内容);返回结果;}捕获(例外e){系统。出去。println(' Exception : ' e . tostring());}返回null} /** *字符串装换成base64 */公共静态字节[]stringToBase64(字符串键)引发异常{ return base64。decadebase64(密钥。getbytes());} /** * Base64装换成字符串*/public静态字符串Base64字符串(字节[]键)引发异常{返回新的Base64().encodeToString(密钥);} }再上前端代码(需引用卷起目录下的aes.js):
函数encodaesstring(data,key,iv){ var key=cryptojs . enc . utf8 . parse(key);var iv=crypto js . enc . utf8 . parse(iv);var encrypted=CryptoJS。AES.encrypt(数据,密钥,{ iv:iv,mode:CryptoJS.mode.CBC,padd : crypto js . pad . pkcs7 });//返回的密文是base64格式的返回加密;} //encrypted是密文函数decode string(encrypted,key,iv){ var key=crypto js . enc . utf8 . parse(key);var iv=crypto js . enc . utf8 . parse(iv);var解密=CryptoJS。AES.decrypt(加密,密钥,{ iv:iv,mode:CryptoJS.mode.CBC,padd : crypto js . pad . pkcs7 });返回解密的. tostring(cryptojs . enc . utf8);}//测试加解密函数testes(){ var data='明文123 ABC ';//清除var键=' abcdef0123456789//密钥长度16 var iv=' abcdef0123456789//密钥长度为16 console.log('加密前:' data ');//测试加密varencrypted=encodeaesstring(数据,密钥,iv);//密文console.log('加密后: '加密);var decryptedStr=decodeAesString(加密,密钥,iv);Console.log('解密的: ' DecryptedStr);}粘贴渲染:
中间遇到的问题:
1.密钥问题,密钥长度必须是16位,否则会报错
2.加密后的字节[]需要使用Base64转换成字符串,但不能直接转换成字符串,因为加密中使用的AES、MD5、SHA-256、SHA-512等算法都是通过对字节[]的各种变换和运算得到加密后的字节[]的,所以加密后的字节[]结果显然不符合任何编码方案,因此,如果使用任何编码方案对加密后的字节[]结果进行解码,就会得到乱码字符。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:CryptoJS中俄歇电子能谱实现前后端通用加解密技术是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。