首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES Java安全

AES Java安全
EN

Code Review用户
提问于 2017-03-29 19:44:07
回答 1查看 139关注 0票数 1

我对安全性很陌生,我想知道是否可以通过更改或添加一些东西来使程序更好/更安全。

我应该使用keyGenerator吗?我对我的程序输出有怀疑。

输出

代码语言:javascript
复制
Encrypted Message: +g@þóv«5Ùû`ž   
keybyte: [B@71e7a66b   
Original string: Message   
Original string (Hex): [B@2ac1fdc4
代码语言:javascript
复制
public class AES {

public static void main(String ... args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
    final String Algo="AES";
    String key = "aaaaaaaaaaaaaaaa";
    byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);

    MessageDigest sha= MessageDigest.getInstance("SHA-1"); 
    keyBytes=sha.digest(keyBytes);
    keyBytes=Arrays.copyOf(keyBytes, 16);

    SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, Algo);
    Cipher cipher = Cipher.getInstance(Algo);
    cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
    byte[] ciphertext = cipher.doFinal("Message".getBytes());
    System.out.println("Encrypted Message: " +new String(ciphertext));

    cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
    byte[] original = cipher.doFinal(ciphertext);
    String originalString = new String(original);
    System.out.println("keybyte: "+keyBytes);
    System.out.println("Original string: " + originalString + "\nOriginal string (Hex): " +original);

}
}
EN

回答 1

Code Review用户

发布于 2017-03-30 11:33:00

<插入免责声明,如果你不太了解它,就不要用自制的东西来安全。而且,我不是一个安全专家,我只能告诉你什么是明显的错误,而不是如果它是安全的。我有点抱歉,这听起来有些刺耳,但请更深入地了解这个主题,例如,密码学的挑战是一种很棒的学习方式,以防你在hand.>没有其他资源

这样,代码在任何方面都是不安全的--形状或形式。您必须假设攻击者知道所有代码,包括任何硬编码值。否则,您应该指出它们是示例值,应该被理解为输入。

现在我们假设键是输入的;在它上运行SHA-1是可以的,但不会使它更加安全。在实践中,您可能会在上面运行一个适当的密钥推导函数,以防您不生成随机密钥。

然后,阅读文档(或者看斯塔克溢出)会告诉您,这个Java中的"AES"的默认设置是欧洲央行模式 (带有PKCS#5填充,但这并不重要)--这是不安全的,因为该段中的图片很好地说明了这一点。这也表明您不能依赖这些默认设置,因为AFAIK没有指定它们将是什么。

顺便说一下,keybyte: [B@71e7a66b显示了数组的一些内部表示,而不是实际的字节(请注意[B@模式);例如,关于这个问题的一些想法是看这儿 --在实践中,您当然是在使用一个库。

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

https://codereview.stackexchange.com/questions/159283

复制
相关文章

相似问题

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