【问题标题】:Encrypt with PHP and Decrypt with Java用 PHP 加密和用 Java 解密
【发布时间】:2011-04-29 15:02:06
【问题描述】:

我必须编写一个程序来使用 JAVA 解密消息。消息使用 PHP 中实现的 Triple DES / ECB 进行加密。我在算法、模式和填充模式上尝试了一些不同的设置。我没有得到正确的结果。缺什么?

这是加密消息的 PHP 程序:

$config_mcrypt_ecb_key = "12345678901234567890";
$data = "hello";
echo "Data Before Encrypt: " . $data . "\n";
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_ENCRYPT);
mcrypt_generic_init($td, $config_mcrypt_ecb_key, $iv);
$data_encrypt = bin2hex(mcrypt_generic($td, $data));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
echo "Data After Encrypt: " . $data_encrypt . "\n";

下面是解密消息的java程序:(我使用的是BouncyCastleProvider)

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;

public class DecryptionTest {
    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException {
        String password = "12345678901234567890";
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        SecretKeySpec key = new SecretKeySpec(password.getBytes(), "ECB");
        Cipher m_decrypter = Cipher.getInstance("DESede/ECB/ZeroBytePadding");
        m_decrypter.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedText = m_decrypter.doFinal("bdf0baf948bff7e7".getBytes());
        System.out.println(new String(decryptedText));
    }
}

【问题讨论】:

    标签: encryption mcrypt jce des ecb


    【解决方案1】:

    执行解密时,您似乎没有使用 IV(初始化向量)。我的理解是mcrypt_create_iv()会生成一个随机IV,所以你需要把它和加密数据一起存储,以便解密时使用。

    或者(如果您对使用较弱的加密感到满意)从您的 PHP 端省略 IV。

    【讨论】:

    • 我也尝试过添加 IV。它失败并出现异常“java.security.InvalidAlgorithmParameterException:ECB 模式不使用 IV”。我有关于 IV 的谷歌。它说欧洲央行将忽略IV。
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2013-03-16
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多