小编Jos*_*ick的帖子

使用PHP AES CCM模式解密意外的结果

我正在尝试使用AES-256-CCM重现加密操作,该操作目前在Java中与Bouncy Castle提供商一起执行.当使用openssl在PHP中尝试相同的操作时,我找不到一组产生相同输出的参数.

由于最近将AEAD模式添加到PHP(7.1)中,因此文档的工作原理很少.

Java中"工作"加密的最小示例如下所示:

    public static void main(String args[]) {
    try {
        java.security.Security.addProvider(new BouncyCastleProvider());
        byte[] key = Base64.decodeBase64("Z4lAXU62WxDi46zSV67FeLj3hSK/th1Z73VD4/y6Eq4=".getBytes());
        byte[] iv = Base64.decodeBase64("rcFcdcgZ3Q/A+uHW".getBytes());

        SecretKey aesKey = new SecretKeySpec(key, 0, key.length, "AES");
        Cipher aesCipher = Cipher.getInstance("AES/CCM/NoPadding", "BC");
        aesCipher.init(1, aesKey, new IvParameterSpec(iv));

        byte[] encrypted = aesCipher.doFinal("test".getBytes());
        System.out.println(Hex.encodeHex(encrypted));

        // Output: 411d89ff74205c106d8d85a8
    }
    catch (Throwable e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我试图使用不同的两个不同的库和语言重新生成它时,我已经将键和iv设置为已知值.

当尝试使用PHP和openssl重新生成它时,我正在尝试使用以下代码

$key = base64_decode("Z4lAXU62WxDi46zSV67FeLj3hSK/th1Z73VD4/y6Eq4=");
$iv = base64_decode('rcFcdcgZ3Q/A+uHW');
$data = 'test';
$tag = null;

$encrypted = openssl_encrypt($data,'aes-256-ccm', $key,OPENSSL_RAW_DATA, $iv, $tag,"",8);
echo(bin2hex($encrypted . $tag));
// d1a7403799b8c37240f36edb …
Run Code Online (Sandbox Code Playgroud)

php encryption bouncycastle sjcl php-openssl

8
推荐指数
1
解决办法
296
查看次数

标签 统计

bouncycastle ×1

encryption ×1

php ×1

php-openssl ×1

sjcl ×1