【问题标题】:AES 256-bit gcm encryption on PHP side and decryption on JAVA sidePHP 端的 AES 256 位 gcm 加密和 JAVA 端的解密
【发布时间】:2017-05-05 19:57:05
【问题描述】:

我正在尝试在 PHP 和 Java 之间使用 AES-256 位 GCM 加密。问题是我在 Android 的 Java 端收到了这个异常:

Decryption Error.!
javax.crypto.AEADBadTagException: error:1e06e065:Cipher functions:aead_aes_gcm_open:BAD_DECRYPT

我正在使用的代码: 在 PHP 方面

$algo = 'aes-256-gcm';
$iv   = random_bytes(openssl_cipher_iv_length($algo));
$key  = "secretKey12345678998765432112345"; // 256 bit 
$data = "HelloWorld";
$ciphertext = openssl_encrypt(
 $data,
 $algo,
 $key,
 OPENSSL_ZERO_PADDING,
 $iv,
 $tag
);
echo base64_encode($key);
echo base64_encode($iv);
echo $ciphertext;

在 Java、Android 上,我正在使用以下代码:

static final int GCM_TAG_LENGTH = 16;
...
String decryptedText = null;
    byte[] encodedData = Base64.decode(data, Base64.DEFAULT);
    byte[] decodediv = Base64.decode(iv, Base64.DEFAULT);
    byte[] decodedKey = Base64.decode(key, Base64.DEFAULT);

    Log.e("data", new String(encodedData, 0));
    Log.e("iv", new String(decodediv, 0));
    Log.e("key", new String(decodedKey, 0));
    Log.d("test", "test");

    SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");

    try {
        Cipher c = Cipher.getInstance("AES/GCM/NoPadding");

        c.init(Cipher.DECRYPT_MODE, originalKey , new GCMParameterSpec(GCM_TAG_LENGTH * 8,decodediv));
        byte[] decodedData = c.doFinal(encodedData);
        decryptedText = new String(decodedData, "UTF-8");
        Log.e("MainActivity", "After decryption : "+ decryptedText);
    } catch (Exception e) {
        Log.e("MainActivity", "Decryption Error.!", e);
    }
    return decryptedText;

我正在使用此页面中的 php 代码:

zimuel.it/blog/authenticated-encrypt-with-openssl-and-php-7-‌​1

我使用的是php v7.1.4

异常原因可能是什么?

【问题讨论】:

  • $tag 是在哪里定义的?它的定义是什么?
  • 我没有定义 $tag 变量,这是来自 zimuel 页面:身份验证哈希存储在 $tag 变量中。该值由 openssl_encrypt 函数填充并作为参考返回。我是这类事情的初学者。

标签: java php android encryption aes


【解决方案1】:

我自己解决了,我只需要在PHP中加密的消息末尾添加base64编码的$tag变量,因为JAVA AES gcm实现会搜索我之前没有提供的标签。

【讨论】:

  • 我使用了相同的解决方案,但仍然无法正常工作。我仍然收到标签不匹配异常。你能分享你的最终解决方案吗
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 2021-11-07
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 2021-06-04
  • 2021-11-07
相关资源
最近更新 更多