java - PHP和JAVA加解密例程

标签 java php android encryption aes

我有以下 PHP 例程来加密我与客户端的通信:

public static function encrypt($input, $key) {
        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); 
        $input = AES::pkcs5_pad($input, $size); 
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); 
        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
        mcrypt_generic_init($td, $key, $iv); 
        $data = mcrypt_generic($td, $input); 
        mcrypt_generic_deinit($td); 
        mcrypt_module_close($td); 
        $data = base64_encode($data); 
        return $data; 
} 

和下面的 Java rotuine 来解密我与服务器的通信:

public static String decrypt(String input, String key) {
        byte[] output = null;
        try {
            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skey);
            output = cipher.doFinal(Base64.decode(input,Base64.NO_WRAP));
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        return new String(output);
}

为什么下面的解密例程会抛出异常?

java.lang.IllegalArgumentException: bad base-64

编辑:将字符串硬编码到代码中后,我得到一个 BadPaddingException。

我的解密函数输入:

wrmRa2hAoseNOev6/ascapxkLQRGX/GW3DQm3ETwBH7gJm1NetkgGFzgY4kZTE10Tv45YIcy/xoodq/GumSY5hsao1s4bkuKXZeim/IDTVr3elrqX13b81/XE5iB3iJrAqny2dQ5SsWso0lUcAZGS2Wls/lTeQiIKXEaOh7iZZ3xOtM6633iNcoiFxEnX5A0dMrdRNEOkmQ3UnQmuIGTSv0RLKuPv5r5dplGZ3N2LMMpoB0AMu3DSXFEdiD4XN49

最佳答案

您可能需要使用:

Base64.decode(input,Base64.NO_WRAP|Base64.URL_SAFE)

您也可能需要不同的标志组合。

这还取决于您获取 base64 字符串的方式。如果从 URL 或其他在线来源传输,有时“+”会转换为“”(空格)。

关于java - PHP和JAVA加解密例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805168/

相关文章:

java - 您如何决定在哪些实体类中放置 JPA NamedQuery 注释?

java - 通过 Spring MVC 发送包含 XML 文档的 POJO

php - 选择没有LIMIT mysql的n行

无需重构的 Android Studio 重命名

java - 通过android Volley使用PUT方法发送空体

java - struts2 <s :select. ..> 标签

java - 删除 OneToMany 关系中的实体

php - 用户个人资料图像和内容之间的空间。 Bootstrap

php - MySQL 查询出现故障?

android - 是否可以从命令行触发 Android 堆转储?