将php mcrypt_encrypt MCRYPT_3DES转换为Java

时间:2014-11-14 04:39:23

标签: java php encryption cryptography 3des

我有PHP代码

$res = strtoupper(bin2hex(mcrypt_encrypt(MCRYPT_3DES, $this->hex2str($key), $this->hex2str($data), MCRYPT_MODE_ECB)));

public function hex2str($data) { 
      $len = strlen($data); 
      $res = pack("H" . $len, $data);
      return $res; 
} 

我尝试在java版本中创建。
Java代码:

private String doEncrypt3DES(String key, String data) throws Exception{
        SecretKey secretKey;
        byte[] keyValue;
        Cipher c;

        keyValue = Hex.decodeHex(key.toCharArray());
        DESedeKeySpec keySpec = new DESedeKeySpec(keyValue);
        secretKey = SecretKeyFactory.getInstance("DESede").generateSecret(keySpec);

        // Create the cipher
        c = Cipher.getInstance("DESede/ECB/NoPadding");

        c.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] text = data.getBytes("utf-8"); // Base64.decodeBase64(data);
        byte[] textEncrypt = c.doFinal(text);
        String hex = bytesToHex(textEncrypt);
        return hex;
}

但是他们得到了不同的结果。你能帮我修一下java代码吗?
数据CED0CF172E8AC451B39FC746C5339F29

密钥436C6561724B657944657632536E724D436C6561724B6579

1 个答案:

答案 0 :(得分:1)

对数据使用十六进制解码而不是utf-8解码。