java - SlowAES加密和java解密

标签 java aes cryptography

我尝试实现 AES .NET 中讨论的相同步骤

但没有成功,我似乎无法让java和slowAes一起玩...附件是我的代码我很抱歉我无法添加更多这是我第一次尝试处理加密将不胜感激任何帮助

private static final String ALGORITHM = "AES";
private static final byte[] keyValue = getKeyBytes("12345678901234567890123456789012");

private static final byte[] INIT_VECTOR = new byte[16];
private static IvParameterSpec ivSpec = new IvParameterSpec(INIT_VECTOR);

public static void main(String[] args) throws Exception {
    String encoded = encrypt("watson?");
    System.out.println(encoded);
}

private static Key generateKey() throws Exception {
    Key key = new SecretKeySpec(keyValue, ALGORITHM);
    // SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
    // key = keyFactory.generateSecret(new DESKeySpec(keyValue));
    return key;
}

private static byte[] getKeyBytes(String key) {
    byte[] hash = DigestUtils.sha(key); // key.getBytes()
    byte[] saltedHash = new byte[16];
    System.arraycopy(hash, 0, saltedHash, 0, 16);
    return saltedHash;
}

public static String encrypt(String valueToEnc) throws Exception {
    Key key = generateKey();
    Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
    c.init(Cipher.ENCRYPT_MODE, key,ivSpec);
    byte[] encValue = c.doFinal(valueToEnc.getBytes());
    String encryptedValue = new BASE64Encoder().encode(encValue);
    return encryptedValue;
}

public static String decrypt(String encryptedValue) throws Exception {
    Key key = generateKey();
    Cipher c = Cipher.getInstance(ALGORITHM);
    c.init(Cipher.DECRYPT_MODE, key);
    byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedValue);
    byte[] decValue = c.doFinal(decordedValue);
    String decryptedValue = new String(decValue);
    return decryptedValue;
}

返回的字节不同 提前致谢。

最佳答案

您使用 CBC 模式下的 AES 和 PKC5Padding 加密数据,但仅使用普通 AES 解密。在解密方法中,您需要使用“AES/CBC/PKCS5Padding”创建密码,就像在加密方法中一样。

关于java - SlowAES加密和java解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3032832/

相关文章:

c++ - 加密敏感数据的内存安全

java - 如何在X25519中为PrivateKey生成PublicKey?

php - php 中的 AES 加密和 perl 中的解密

java - JList 使用对象删除列表

java - 具有相同字段(id,name,...)的不同对象的唯一列表

将 JSON 放入 REST 服务时 Java Null System.util.Date

python - 在 Go 中解密在 Python 中以 CFB 模式使用 AES 加密的内容

flutter - 输入数据必须是 AES CTR 模式下密码 block 大小的倍数

cryptography - 虚拟化对加密强度高的随机数生成器有什么影响?

java - JPA/Eclipselink 缓存生命周期