字符串像这里一样用php加密。可以用这个用参数解密:Rijndael-256,ECB,Base64。但是我的ActionScript代码无法解密它:
var text:String = "Some data";
var key:ByteArray = new ByteArray();
key.writeUTFBytes("SomePassword");
key.position = key.length;
for (var i:int = key.length; i < 256 / 8; i++) {
key.writeByte(0);
}
var pad:IPad = new NullPad();
var cipher:ICipher = Crypto.getCipher("aes-256-ecb", key, pad);
var data:ByteArray = Base64.decodeToByteArray(text);
cipher.decrypt(data);
trace(data.toString());
更新:
“它无法解密”意味着我弄错了纯文本。
在php中,明文首先由aes-256-ecb加密。然后由Base64编码。在ActionScript中,这些步骤以相反的顺序进行。
UPD2:
编码-解码测试:
var key:ByteArray = new ByteArray();
key.writeUTFBytes("Some password");
key.position = key.length;
for (var i:int = key.length; i < 256 / 8; i++) {
key.writeByte(0);
}
trace(key.toString());
var data:ByteArray = new ByteArray();//plain text
data.writeUTFBytes("Hello, my dear World! Hello, the Sun! Hello, the Moon! Hello! Hello! Hello!");
var pad:IPad = new NullPad();
var cipher:ICipher = Crypto.getCipher("aes-256-ecb", key, pad);
trace(data.toString());//trace plain text
cipher.encrypt(data);
trace(data.toString());//trace encrypted text
cipher.decrypt(data);
trace(data.toString());//trace decrypted text
在 cihper.encrypt(data)
停止后的输出是:
Some password
Hello, my dear World! Hello, the Sun! Hello, the Moon! Hello! Hello! Hello!
[Fault] exception, information=Error: Error #2030: End of file found.
更新3:
它适用于PKCS5填充:
var pad:IPad = new PKCS5();
var cipher:ICipher = Crypto.getCipher("aes-256-ecb", key, pad);
pad.setBlockSize(cipher.getBlockSize());
输出为:
Some password
Hello, my dear World! Hello, the Sun! Hello, the Moon! Hello! Hello! Hello!
$ú^{±àÙ[pm|x¿9¡ÃZsI D¾`©4¾þÂõ,J
('èfÑk1ôì&ªQƆfbÇåòþ§VµÄs ¦p<iÿ
Hello, my dear World! Hello, the Sun! Hello, the Moon! Hello! Hello! Hello!
UPD4:
对于从php(如图所示)获取的数据,使用PKCS5填充的代码在此处停止运行。使用Null填充不会停止,但解密的数据是错误的。
引用上一篇文章中的代码:
return trim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, $sValue,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
)
);
MCRYPT_RIJNDAEL_256不是AES。MCRYPT_RIJNDAEL_128是。Rijndael具有可变的块大小。AES 是 Rijndael 的一个子集,具有固定的块大小。
MCRYPT_RIJNDAEL_* 后面的数字是指块大小。所以MCRYPT_RIJNDAEL_256是具有 256 位块大小的 Rijndael。MCRYPT_RIJNDAEL_128是Rijndael,大小为128块,又名AES。
另外,如果您要使用MCRYPT_MODE_ECB我会将 mcrypt_create_iv() 调用替换为一堆空字节的空字符串。ECB 作为块模式不使用 IV。
最后,我个人的建议是使用phpseclib,这是一个纯粹的PHP AES实现,因为这与mcrypt的直觉相反。
问题内容: 我有一个来自CryptoJS的加密AES-256字符串,带有密码短语。我需要用Java对其解密,但无法弄清楚该怎么做。似乎需要IV,密钥和盐来解密,就像在CryptoJS主页中一样,加密的数据已经包含所有这些内容,并且CryptoJS可以某种方式从加密的输入中解析出它们。 有人知道该怎么做吗?我已经看到了很多有关CryptoJS的示例-Java加密/解密,但大多数都使用硬编码的IV /
我有一个加密的AES-256字符串从CryptoJS与密码。我需要Java解密,但不知道怎么做。似乎你需要IV、key和盐来解密,就像在CryptoJS主页一样,加密数据已经包含了所有这些数据,CryptoJS可以以某种方式将它们从加密输入中解析出来。 有人知道怎么做吗?我已经看到了很多关于CryptoJS的例子——Java加密/解密,但大多数都使用硬编码的IV/密钥,或者只是从CryptoJS端
我在这个网站上用AES-256加密一个虚拟字符串: https://www.devglan.com/online-tools/aes-encryption-decryption 具有以下参数: null 当我尝试用OpenSSL从命令行解密它时: 我得到这个错误:
所以我有一个AES-256-ecb base64字符串,我用在线工具解码了它。然而,我更喜欢命令行,所以我尝试使用命令行来解码它。 这是我尝试过的,但我得到了严重的解密错误 是加密的base64文本 -aes-256-ecb是加密密码 而366a74cb3c959de17d61db30591c39d1是关键 结果应该是另一个base64字符串:
我正在尝试解密一个文本,它是用AES-256-ECB用给定的密钥加密的。为了解密,Im使用了用于加密的相同版本的openssl(openssl 1.1.1d,2019年9月10日)。 我试过这些命令: 我得到的是:。有什么问题?
我想在Go中使用AES-256加密一个字符串,无需任何GCM处理,以与MQL4进行比较。当我试图加密特殊字符或数字时,我会遇到问题。我应该以某种方式预处理我的明文吗?我是新来的,所以任何帮助都将不胜感激;我的代码在这个解释下面。 如果我加密明文“这是一个秘密”,然后解密密文(编码为十六进制),我会得到相同的结果(即“这是一个秘密”)。pt是下面代码中明文的变量名。 如果我试图加密“这是一个秘密;1