【发布时间】:2017-10-27 13:59:09
【问题描述】:
我想使用 AES 加密实现自定义密钥,我找到了以下实现和有关这样做的详细信息。
byte[] key = (SALT2 + username + my_custom_secret_key).getBytes("UTF-8");
MessageDigest sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16); // use only first 128 bit
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
但我有以下疑惑:
byte[] my_key = (SALT2 + username + my_custom_secret_key).getBytes("UTF-8");
SecretKeySpec secretKeySpec = new SecretKeySpec(my_key, "AES");
如果我要使用典型的示例代码,例如:
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
- 我应该如何/在哪里存储我的密钥,即“mysecretkey_123456”
- 为什么需要使用 SHA-1/2 对“(SALT2 + 用户名 + 密码)”的组合进行“散列”并将 byte[] 数组传递给 SecretKeySpec?
- 为什么我不能将明文密钥作为 byte[] 发送?
- 我正在尝试确保“密钥”是动态的,以便它基于 salt+username+my_custom_secret_key,以便相同的加密字符串具有不同的输出。
【问题讨论】:
标签: java encryption cryptography