gpt4 book ai didi

java - 在 Java 中解密 PHP AES-256-CFB

转载 作者:行者123 更新时间:2023-12-02 10:54:11 24 4
gpt4 key购买 nike

我创建了一个帮助函数,用于使用PHP 中的 OpenSSL 加密数据。

private const METHOD = 'AES-256-CFB';
private const KEY = 'g5(Mt2-2x=wsS8^K';

public static function encrypt($data) {
$crypted = openssl_encrypt($data, self::METHOD, self::KEY, 1, substr(hash('sha256', self::KEY_1), 0, 16));
return base64_encode($crypted);
}

为了用Java解密AES-CFB-256数据,我也制作了一个Helper类。

private String decrypt(String sdata) throws Exception {
String sKey = "g5(Mt2-2x=wsS8^K";

byte[] key = sKey.getBytes();
byte[] iv = Arrays.copyOfRange(hash("SHA-256", key).getBytes(), 0, 16);
byte[] data = Base64.getDecoder().decode(sdata.getBytes());

Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");
SecretKey aesSecret = new SecretKeySpec(key, "AES");
IvParameterSpec ivps = new IvParameterSpec(iv);

cipher.init(Cipher.DECRYPT_MODE, aesSecret, ivps);
byte[] result = cipher.doFinal(data);

StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.length; i++) {
sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}

System.out.println(new String(result, StandardCharsets.UTF_8) + " : " + sb.toString());
return sb.toString();
}

private String hash(String type, byte[] data) throws Exception {
MessageDigest digest = MessageDigest.getInstance(type);
data = digest.digest(data);

StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
sb.append(Integer.toString((data[i] & 0xff) + 0x100, 16).substring(1));
}

return sb.toString();
}

我注意到 JAVA 中的哈希函数可以工作,并且给出的结果与 PHP 中的哈希函数相同。问题是密码的结果完全不同,我不认为这是错误。

感谢您的帮助

最佳答案

经过几次测试,Java 似乎使用 AES-128 而不是 AES-256
如果我修改这部分PHP代码。

private const METHOD = 'AES-256-CFB';

至此

private const METHOD = 'AES-128-CFB';

Java 和 PHP 现在返回相同的结果。
希望对您有所帮助

关于java - 在 Java 中解密 PHP AES-256-CFB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51912887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com