为了账号安全,请及时绑定邮箱和手机立即绑定

如何用 Java 加密用 PHP 解密?

如何用 Java 加密用 PHP 解密?

临摹微笑 2023-06-04 17:08:37
我有一个遗留脚本,它已经将加密数据保存到数据库中。加密/解密是用 Java 以下代码完成的。public class StringEncrypter {    Cipher ecipher;    Cipher dcipher;    /**     * Constructor used to create this object. Responsible for setting and     * initializing this object's encrypter and decrypter Chipher instances     * given a Pass Phrase and algorithm.     *      * @param passPhrase     *            Pass Phrase used to initialize both the encrypter and     *            decrypter instances.     */    public StringEncrypter(String passPhrase) {        // 8-bytes Salt        byte[] salt = { (byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32,                (byte) 0x56, (byte) 0x34, (byte) 0xE3, (byte) 0x03 };        // Iteration count        int iterationCount = 19;        try {            KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt,                    iterationCount);            SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES")                    .generateSecret(keySpec);            ecipher = Cipher.getInstance(key.getAlgorithm());            dcipher = Cipher.getInstance(key.getAlgorithm());            // Prepare the parameters to the cipthers            AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt,                    iterationCount);            ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);            dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);这会像这样将一个字符串放入数据库RX0qxgKAKmjQmS9xjNtFnw==我需要能够使用 PHP 解密这些数据。我尝试使用 github 中的这个脚本: https: //github.com/KevinBusse/PBEWithMD5AndDES但只能得到一个输出bad magic number这可能吗?如果是这样,任何方向将不胜感激!
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

如果从 Java 代码中获取以下设置,则可以使用 Github 代码进行解密:

  • 盐(十六进制):A99BC8325634E303

  • 迭代:19

例子:

Passphrase:                    MyPassphraseXYZ

Plaintext:                     The quick brown fox jumps over the lazy dog

Ciphertext from the Java code: xWnsqJJ4pqWTrm8kIwfyw1djD4lu0zig0wnohS+EtwDvHBgEP/BS25qyaE+QEdxd

可以使用 PHP 代码解密密文,如下所示:


$data = "xWnsqJJ4pqWTrm8kIwfyw1djD4lu0zig0wnohS+EtwDvHBgEP/BS25qyaE+QEdxd";

$keystring = "MyPassphraseXYZ";

$salt = "A99BC8325634E303";

$iterationsMd5 = 19; 

$decrypted = PbeWithMd5AndDes::decrypt($data, $keystring, $salt, $iterationsMd5);

print($decrypted . "\n");

必须考虑以下因素:PbeWithMd5AndDes已经过时并且已经存在多年,Github 代码本身使用了其他已弃用的函数,例如mcrypt_module_XXX()and mcrypt_generic_YYY(),因此此代码只能在 PHP < 7.2 的情况下执行。在 PHP 7.1 中,显示弃用警告。只有 PHP < 7.1 的代码可以在没有警告的情况下执行。总而言之,算法和代码都是不安全的。



查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信