猿问

如何用 Java 加密用 PHP 解密?

我有一个遗留脚本,它已经将加密数据保存到数据库中。


加密/解密是用 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


这可能吗?如果是这样,任何方向将不胜感激!


临摹微笑
浏览 150回答 1
1回答

守着一只汪

如果从 Java 代码中获取以下设置,则可以使用 Github 代码进行解密:盐(十六进制):A99BC8325634E303迭代:19例子:Passphrase:                    MyPassphraseXYZPlaintext:                     The quick brown fox jumps over the lazy dogCiphertext 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 的代码可以在没有警告的情况下执行。总而言之,算法和代码都是不安全的。
随时随地看视频慕课网APP

相关分类

Java
我要回答