后端的解码方法是这样的,我在前端用crypto-js应该怎么设置参数?
// 解密模式/补码方式,固定值,不允许修改String CIPHER_MODEL = "/CBC/NoPadding";// 解密算法,固定值,不允许修改String keyAlgorithm = "AES";// 密钥,从医院获取String key = "M4pe91TNP39MvGmDNNgq7w==";// 待解密内容 String content = "a5KxFJpwuQlH5EOZeIBZteWKCflCykxfzj5ZIUtlOYI=";// 将密钥进行base64解密 byte[] keys = Base64.getDecoder().decode(key); // 转base64字节码 byte[] contentBytes = Base64.getDecoder().decode(content); // 按照 算法/模式/补码方式 构建Cipher对象Cipher cipher = Cipher.getInstance(keyAlgorithm + CIPHER_MODEL);// 生成密匙 SecretKeySpec keyspec = new SecretKeySpec(key, keyAlgorithm);// 构建偏移量,使用密钥作为偏移量 IvParameterSpec ivspec = new IvParameterSpec(key);// 用密钥和一组算法参数初始化此 Cipher// Cipher.ENCRYPT_MODE用于将 Cipher 初始化为解密模式的常量 cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);// 将密文进行解密,得到解密后数据byte[] result= cipher.doFinal(content); // decodeContent 为最终解密后的内容 String decodeContent = new String(result, Charset.forName("utf-8")).trim();
下面是我写的,但我知道有些参数是不对的,有懂的吗?
import CryptoJS from 'crypto-js'import { Base64 } from 'js-base64';//加密function encryption(data,iv,key){ let keyOk=CryptoJS.enc.Utf8.parse(key) let ivOk=CryptoJS.enc.Utf8.parse(iv) let encryptedData=CryptoJS.AES.encrypt(data,keyOk,{ iv:ivOk, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.Pkcs7 }).toString() return encryptedData;}//解密 function decryption(data,iv,key){ console.log(data,iv,key) let keyOk=CryptoJS.enc.Utf8.parse(key) let ivOk=CryptoJS.enc.Utf8.parse(iv) let dataOk=data let decryptedData=CryptoJS.AES.decrypt(dataOk,keyOk,{ iv:ivOk, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8) return decryptedData}export { encryption, decryption};
你的前端代码看起来已经很接近了,但是有几个关键的差异需要注意。
首先,你的后端代码是使用Java的JCE (Java Cryptography Extension) 和 Cipher 类进行加密和解密的。而在前端,你使用的是CryptoJS,这是一个JavaScript库,它对AES加密提供了一个纯JS实现。这两者在内部工作方式和一些细节上有很大的差异。
你的后端代码中,密钥和初始化向量(IV)都是Base64解码的,而在CryptoJS中,你不需要手动进行这个解码步骤,因为CryptoJS会自动处理。
其次,你在后端代码中直接将密钥作为偏移量,而在CryptoJS中,你需要创建一个专门用于CBC模式的密钥对象。
下面是一个修正后的版本:
import CryptoJS from 'crypto-js'// 密钥和初始化向量const key = "M4pe91TNP39MvGmDNNgq7w=="; // 这个密钥应该是16进制字符串,而不是Base64编码的字符串const iv = "a5KxFJpwuQlH5EOZeIBZteWKCflCykxfzj5ZIUtlOYI="; // 这个IV应该是16进制字符串,而不是Base64编码的字符串// 将密钥和IV转换为16进制字节数组const keyBytes = CryptoJS.enc.Base64.parse(key);const ivBytes = CryptoJS.enc.Base64.parse(iv);// 加密函数function encryption(data){ let encrypted = CryptoJS.AES.encrypt(data, keyBytes, { iv: ivBytes, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString();}// 解密函数function decryption(data){ let decrypted = CryptoJS.AES.decrypt(data, keyBytes, { iv: ivBytes, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8);}
请注意,这里我们假设你的密钥和IV是Base64编码的字符串,这是因为你的后端代码是这样的。如果它们实际上是16进制字符串,那么你需要将它们转换为CryptoJS可以理解的格式。如果你的密钥和IV实际上是Base64编码的,那么你应该使用CryptoJS.enc.Base64.parse
来解析它们。
这种UE加密文件有解密的方法吗?让它恢复加密前的格式 这种触及知识盲区了,不知道该怎样尝试
Hutool-crypto概述 加密分为三种: 对称加密(symmetric),例如:AES、DES等 非对称加密(asymmetric),例如:RSA、DSA等 摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等 hutool-crypto针对这三种加密类型分别封装,并提供常用的大部分加密算法。 对于非对称加密,实现了: RSA DSA 对于对称加密,实现了: AES
问题内容: 我计划在我的网站上为我的用户存储外国帐户信息,也称为RapidShare用户名和密码等。我想确保信息的安全,但是我知道,如果我对他们的信息进行哈希处理,我将无法将其检索以备后用。 Base64可以解密,因此毫无意义地使用它。我的想法是对用户进行加扰,即使在解密之后,也要以这种方式传递base64前后,如果尝试解密,则会得到一些看上去很有趣的文本。是否有一个php函数接受可以对字符串进行
问题内容: 我们正忙于为客户开发Java Web服务。有两种可能的选择: 将加密的用户名/密码存储在Web服务客户端上。从配置读取。客户端上的文件,解密并发送。 将加密的用户名/密码存储在Web服务器上。从配置读取。Web服务器上的文件,解密并在Web服务中使用。 Web服务使用用户名/密码来访问第三方应用程序。 客户端已经具有提供此功能的类,但是此方法涉及以明文方式发送用户名/密码(尽管在内联网
本文向大家介绍使用js实现摩斯密码的加密和解密相关面试题,主要包含被问及使用js实现摩斯密码的加密和解密时的应答技巧和注意事项,需要的朋友参考一下 网络上看到的,很长