因为我正在尝试加密haxe&使用AES 256,CTR在php中解密,我注意到如果要加密的数据超过15个字符,解密的结果将是空白的,是否有关于此限制的任何想法?
我像haxe一样加密:
var input:String = "abcdefghijklmno"; // limited to 15 char to be decrypted, other wise, I get blank result..
var utf8Bytes:Array<Int> = UTF8.textToBytes(input);
var aes256iv:Array<Int> = UTF8.textToBytes("1234567890123456");
var aes256key:Array<Int> = UTF8.textToBytes("12345678901234561234567890123456");
var aes256enc:Array<Int> = AES.encrypt(aes256key, PKCS7.pad(utf8Bytes, 16), OperationMode.CTR, aes256iv); // Encrypt in CTR mode. Needs padding.
var aes256dec:Array<Int> = PKCS7.unpad(AES.decrypt(aes256key, aes256enc, OperationMode.CTR, aes256iv)); // Decrypt in CTR mode. Needs unpadding.
writeLine("AES-256 (CTR mode) encrypted in UTF-8: " + Base64.encode(aes256enc));
writeLine("AES-256 (CTR mode) decrypted in UTF-8: " + UTF8.bytesToText(aes256dec));
在PHP中,我解密了:
$aes256i = "1234567890123456";
$aes256k = "12345678901234561234567890123456";
//print $input;
$aes256e = Base64::decode($input);
//print "Base64: " . $aes256e . "<br/><br/>\n";
$aes256d = PKCS7::unpad(AES::decrypt($aes256k, $aes256e, "ctr", $aes256i)); // Needs unpadding.
//
print "AES-256 (CTR mode) decrypted in UTF-8: " . $aes256d . "<br/><br/>\n";
public static function decrypt($key, $text, $mode = "ecb", $iv = null)
{
$size = MCRYPT_RIJNDAEL_128; // AES fixed to 128 bits
if (isset($iv)) return mcrypt_decrypt($size, $key, $text, $mode, $iv);
return @mcrypt_decrypt($size, $key, $text, $mode);
}
那么,任何人都可以提供帮助吗? p.s:如果我在haxe lib中解密,加密的数据没有限制,我会错过PHP方面的内容吗?我在两边使用相同的按键..
答案 0 :(得分:0)
public static function decrypt($key, $text, $mode = "ecb", $iv = null)
将$mode = "ecb"
更改为$mode = "ctr"
将解决您的直接问题。
但是,这里有更深层次的问题:
如果您要加密数据,最好使用libsodium。
无论使用哪种配置,都需要参考libsodium quick reference以确定要使用的功能(以及使用的功能)。