【发布时间】:2016-05-31 21:32:06
【问题描述】:
我在 java 中有这段代码,我需要 PHP 中的等价代码,我在 .NET 中也有这段代码,而且效果很好,但我需要 PHP。
public static String decrypt(String pValor) throws UnsupportedEncodingException {
byte vBytesDecodificados[] = null;
try {
KeySpec vClave = new DESKeySpec("MyKey".getBytes("UTF-8"));
SecretKey vClaveSecreta = SecretKeyFactory.getInstance("DES").generateSecret(vClave);
IvParameterSpec iv = new IvParameterSpec(Hex.decodeHex("1234567890ABCDEF".toCharArray()));
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, vClaveSecreta, iv);
vBytesDecodificados = cipher.doFinal(Base64.decodeBase64(pValor.getBytes()));
} catch (Exception e) {
}
return new String(vBytesDecodificados, "UTF-8");
}
public static String encrypt(String pValor) throws UnsupportedEncodingException {
byte vBytesCodificados[] = null;
try {
KeySpec vClave = new DESKeySpec("MyKey".getBytes("UTF-8"));
SecretKey vClaveSecreta = SecretKeyFactory.getInstance("DES").generateSecret(vClave);
IvParameterSpec iv = new IvParameterSpec(Hex.decodeHex("1234567890ABCDEF".toCharArray()));
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, vClaveSecreta, iv);
byte[] utf8 = pValor.getBytes("UTF8");
byte[] enc = cipher.doFinal(utf8);
vBytesCodificados = Base64.encodeBase64(enc);
} catch (Exception e) {
}
return new String(vBytesCodificados, "UTF-8");
}
【问题讨论】:
-
看Mcrypt library。 mcrypt-encrypt/mcrypt-decrypt 之类的东西应该可以完成这项工作。您可能还需要pack 来处理二进制数据。
-
@AlexBlex 请注意,OP 的代码指定
PKCS5Padding而 mcrypt 不支持PKCS5Padding。 -
@seba123neo DES 不安全,它只使用 56 位密钥,尽可能不使用它。它已被 AES(高级加密标准)取代。
-
@zaph 我总是为你感到难过。您几乎必须在每个带有加密标签的问题上重复自己,而且似乎 OP 从不听。继续加油!
标签: java php android encryption