我需要解密用AES加密的传入请求,我尝试使用共享示例但无法找到正确的参数集
我使用next
const cryptkey = '1234567890123456';
const cleardata = "abcdefghigklmnopqrstuvwxyz0123456789";
const crypted = "8Z3dZzqn05FmiuBLowExK0CAbs4TY2GorC2dDPVlsn/tP+VuJGePqIMv1uSaVErr";
var decrypt = CryptoJS.AES.decrypt(crypted, cryptkey, {
iv: CryptoJS.enc.Hex.parse('0000000000000000'),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var ddd = decrypt.toString(CryptoJS.enc.Utf8);
console.log(ddd);
每次我得到空字符串。我在哪里失败了?
------更新-----
已应用注释的新版本仍不起作用
const cryptkey = CryptoJS.enc.Utf8.parse('1234567890123456');
const crypted = CryptoJS.enc.Base64.parse("8Z3dZzqn05FmiuBLowExK0CAbs4TY2GorC2dDPVlsn/tP+VuJGePqIMv1uSaVErr");
var decrypt = CryptoJS.AES.decrypt(crypted, cryptkey, {
iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
这对我来说很有用,使用enc,而不仅仅是UTF8
const { AES, enc } = require('crypto-js')
const { decrypt, encrypt } = AES
const message = "Hi my friend"
const messageEncrypt = "oPVu8Dd8ERPIAWr+7rQzIQ=="
const key= "key123456"
const aesDecrypt = decrypt(messageEncrypt,key).toString(enc.Utf8)
console.log(aesDecrypt) // Hi my friend
您忘记了以64为基数解码cryted
中的密文(我想你必须使用atob()
来做到这一点)。您的IV也太小了,十六进制每字节取两个十六进制数。
您必须首先解析UTF-8密钥:
const cryptkey = CryptoJS.enc.Utf8.parse('1234567890123456');
如果您不这样做,CryptoJS将假设它是一个密码并从中导出实际的密钥。
正如Maarten所指出的...
密文还必须从Base64解码:
const crypted = CryptoJS.enc.Base64.parse("8Z3dZzqn05FmiuBLowExK0CAbs4TY2GorC2dDPVlsn/tP+VuJGePqIMv1uSaVErr");
请注意,解密程序需要一个CipherParams对象,您可以通过将〈code〉{ciphertext:crypted}传递给〈code〉decrypt函数来模拟该对象。或者,您可以依赖CryptoJS对Base64中的密文进行解码,然后按原样传入该字符串。
对于AES-CBC,IV必须为16字节长,如果编码为十六进制,则为32个字符:
CryptoJS.enc.Hex.parse('00000000000000000000000000000000')
const cryptkey = CryptoJS.enc.Utf8.parse('1234567890123456');
const crypted = CryptoJS.enc.Base64.parse("8Z3dZzqn05FmiuBLowExK0CAbs4TY2GorC2dDPVlsn/tP+VuJGePqIMv1uSaVErr");
var decrypt = CryptoJS.AES.decrypt({ciphertext: crypted}, cryptkey, {
iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(decrypt.toString(CryptoJS.enc.Utf8));
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/rollups/aes.js"></script>
问题内容: 这是我在JSP文件中的Java代码。我正进入(状态 无法解析Base64Encoder。 为什么会这样呢?我必须添加与相关的内容。任何建议将不胜感激。 问题答案: 看起来您正在使用Web应用程序中包含的jar中不存在的类。您可以尝试以下吗?如有必要,请进行调整,我只是在查看通用文档,然后将其输入- 转到http://commons.apache.org/codec/index.html
问题内容: 因此,我直接从Google的android网站复制了此教程示例内容,却收到一个错误,指出R.id无法解决。 这是我的Java文件 这是我的 问题答案: 您必须导入您的R类 同样,如需求发布一样,您必须为布局使用名称空间。
问题内容: 之前一切正常。然后,我碰巧将一个新的xml文件添加到布局中。现在,当setContentView指向(R.layout.menu)时,我的一个类给出了错误。Eclipse告诉我R.layout.menu无法解析。我不知道为什么。我在布局文件夹中定义了一个称为菜单的布局。 有什么建议? 问题答案: 您是否执行过项目>清洁?有时,您只需要让Eclipse重新生成R文件即可。
问题内容: 我是一个Java新手,因此遇到了这个问题。我尝试解码Json,为了做到这一点,我想导入这些包: “无法解决导入问题” …这些软件包是否不再可用,或者我是否需要做其他事情才能使它们起作用? 提前感谢。 问题答案: 可能您的简单json.jar文件不在您的类路径中。