如何在CTR模式下使用AES 256?

问题描述 投票:0回答:1

[当我尝试使用AES 256,CTR在haxe中加密并在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);
    }

那么,有谁能帮上忙? ps:如果我在haxe lib中解密,则加密的数据没有限制,在PHP端会错过什么?我双方都使用相同的键。

[当我尝试使用AES 256,CTR在haxe中加密并在php中解密时,我已经注意到,如果要加密的数据长度超过15个字符,则解密的结果将为空白,关于...的任何想法...] >

public static function decrypt($key, $text, $mode = "ecb", $iv = null)

$mode = "ecb"更改为$mode = "ctr"将解决您的直接问题。

但是,这里有更深层次的问题:

  1. 您是using mcrypt
  2. 您正在使用unauthenticated encryption

    如果您尝试加密数据,则最好使用libsodium

php encryption aes haxe
1个回答
0
投票
public static function decrypt($key, $text, $mode = "ecb", $iv = null)
© www.soinside.com 2019 - 2024. All rights reserved.