小编Lee*_*nen的帖子

Java AES加解密过程及Initialization Vector的用法

我想学习 AES 加密的基础知识,所以我开始制作一个非常简单的 Java 程序。该程序将一个文本文件加载到 a 中String并要求用户提供密钥。然后程序使用 AES 加密文本,用加密的文本创建一个新的文本文件。该程序将初始化向量 (IV) 打印给用户。

该程序还具有解密功能。用户指定加密文本文件以及初始化向量和密钥,以将其解密回新文本文件中的原始文本。

但是,我认为我做错了什么。用户需要同时拥有密钥和 IV 来解密文件是 AES 加密中的正常程序吗?我浏览过互联网,几乎在每个示例中,加密数据都可以由用户仅指定密钥来解密,但在我的情况下,用户需要同时拥有密钥和 IV。该程序运行良好,但我认为它效率不高。

那么我应该使用一个常数,已知的 IV 用于所有加密和解密还是什么?还有一些教程使用“盐”,它是什么,我应该使用它吗?

这是我的加密和解密方法:

public String encrypt(String stringToEncrypt, String userKey)
        throws NoSuchAlgorithmException, NoSuchPaddingException,
        InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

    // User gives string key which is formatted to 16 byte and to a secret
    // key
    byte[] key = userKey.getBytes();
    MessageDigest sha = MessageDigest.getInstance("SHA-1");
    key = sha.digest(key);
    key = Arrays.copyOf(key, 16);
    SecretKeySpec secretKey = new SecretKeySpec(key, "AES");

    // Cipher initialization
    Cipher cipher …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography aes

6
推荐指数
1
解决办法
9528
查看次数

标签 统计

aes ×1

cryptography ×1

encryption ×1

java ×1