java - 密码/3DES/CFB/Java 和 PHP

标签 java encryption 3des

我有一个 PHP 伺服器,它使用 CFB 模式在 3DES 中解密数据

我用 PHP 加密:

$montant = "500";
$message_crypte = mcrypt_encrypt(MCRYPT_3DES, "N4y1FRDRJ7wn7eJNnWaahCIS", $montant, ,CRYPT_MODE_CFB, "NCNPJDcR");
$montant = base64_encode($message_crypte);

PHP 中的此脚本可用于其他系统。

我想用 Java 加密:

public class CryptData {
    private KeySpec keySpec;
    private SecretKey key;
    private IvParameterSpec iv;

    public CryptData(String keyString, String ivString) {
        try {
            final MessageDigest md = MessageDigest.getInstance("md5");

            final byte[] digestOfPassword = md.digest(Base64
                    .decodeBase64(keyString.getBytes("ISO-8859-1")));

            final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
            for (int j = 0, k = 16; j < 8;) {
                keyBytes[k++] = keyBytes[j++];
            }

            //keySpec = new DESedeKeySpec(keyBytes);
            keySpec = new DESedeKeySpec(keyString.getBytes());

            key = SecretKeyFactory.getInstance("DESede")
                    .generateSecret(keySpec);

            iv = new IvParameterSpec(ivString.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String encrypt(String value) {
        try {
            Cipher ecipher = Cipher.getInstance("DESede/CFB/NoPadding");

                    //"SunJCE");
            ecipher.init(Cipher.ENCRYPT_MODE, key, iv);

            if (value == null)
                return null;

            // Encode the string into bytes using utf-8
            byte[] valeur = value.getBytes("ISO-8859-1");
            //byte[] utf8 = value.getBytes();

            // Encrypt
            byte[] enc = ecipher.doFinal(valeur);

            // Encode bytes to base64 to get a string
            return new String(Base64.encodeBase64(enc), "ISO-8859-1");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

我在 PHP 和 Java 中的结果不一样

如何修改Java处理以获得与PHP相同的结果?

最佳答案

答案是:

Cipher ecipher = Cipher.getInstance("DESede/CFB8/NoPadding");

我需要使用“CFB8”

关于java - 密码/3DES/CFB/Java 和 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10993335/

相关文章:

java - Char 到 Int,将 int 值更改回 char,然后添加到字符串

c# - 即使异常被捕获,应用程序也会崩溃(关闭)

swift - MD5 3DES 加密 Swift

php - 3DES PHP 加密无法正确解密

java - 场景不适合舞台

java - Android - 缩放和压缩位图

java - 从java中的未排序数组中获取未使用数字的列表

java - 如何解析包含多个数组的 JSON 文件?

java - 从 Base64 DER 构建公钥 - Java

c# - getResponse 后页面加载但不重定向