首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Java解密PHP AES-256-CFB

用Java解密PHP AES-256-CFB
EN

Stack Overflow用户
提问于 2018-08-19 06:03:26
回答 1查看 450关注 0票数 0

我在PHP中用OpenSSL创建了一个辅助函数来加密数据。

代码语言:javascript
复制
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类。

代码语言:javascript
复制
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中的散列函数相同的结果。问题是,密码的结果是完全不同的,我不认为我们是错误的。

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 08:15:18

经过多次测试,Java似乎用AES-128代替了AES-256

如果我修改这部分PHP代码。

代码语言:javascript
复制
private const METHOD = 'AES-256-CFB';

到这个

代码语言:javascript
复制
private const METHOD = 'AES-128-CFB';

Java和PHP现在返回相同的结果。

我希望它能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51912887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档