【发布时间】:2020-06-26 08:35:38
【问题描述】:
在 Java 和 Delphi 之间使用加密参数进行通信。 如果 Delphi 加密它们,Java 需要解密它们。 但是如果我如下操作,Java会报错... Java酱应该怎么换?
[Delphi源码(加密)]
var
Data: string;
begin
Data := Memo1.Text;
DCP_rijndael1.InitStr(Edt_Password.Text, TDCP_sha256);
DCP_rijndael1.EncryptCBC(Data[1],Data[1],Length(Data));
DCP_rijndael1.Burn;
Memo2.Text := Base64EncodeStr(Data);
end;
[Delphi源码(解密)]
var
Data: string;
begin
Data := Base64DecodeStr(Memo2.Text);
DCP_rijndael1.InitStr(Edt_Password.Text, TDCP_sha256);
DCP_rijndael1.DecryptCBC(Data[1],Data[1],Length(Data));
DCP_rijndael1.Burn;
Memo3.Text := Data;
end;
[Java源码]
public static String Decrypt(String text, String key) throws Exception
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes= new byte[16];
byte[] b= key.getBytes("UTF-8");
int len= b.length;
if (len > keyBytes.length) len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte [] results = cipher.doFinal(decoder.decodeBuffer(text));
return new String(results,"UTF-8");
}
【问题讨论】:
-
这里的问题是什么?看起来你只是想让我们为你编写这段代码。
-
我正在将此代码更改为 java 版本
-
你能和我们分享你的Java代码吗?
-
我修改了我的写作
-
在 Delphi 中,字符串是 Unicode 类型,但在 Java 代码中,您将字符串视为 UTF-8,这是不一样的。
标签: java delphi encryption aes rijndael