sil*_*kid 25 java encryption aes
此代码提供无效的AES密钥长度错误.我怎么能纠正它?(我想要128位密钥AES加密)
package org.temp2.cod1;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.io.*;
public class Code1 {
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
String s = "9882623867";
byte[] plaintext = s.getBytes("UTF-16");
String s2 = "supernova";
byte[] key = s2.getBytes("UTF-16");
Cipher c = Cipher.getInstance("AES");
SecretKeySpec k = new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal(plaintext);
System.out.println(encryptedData);
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏
Dar*_*uid 10
您通常不能使用任何密钥长度(例如您在这里使用"超新星")来获得像AES这样的分组密码.您必须使用适合您所选算法的支持密钥长度(128,192,256等).
一种常见的方法是对密码进行哈希(例如,通过SHA)并提取前N个字节.无论如何这都是更好的,因为它允许你用初始化值"加密"你的密码,这样即使他们的密码相同,也没有两个用户的"密钥"是相同的.如果您真的对这些东西感兴趣,那么开创性的工作就是Bruce Schneier的Applied Cryptography.
有关实际的实现细节,请参阅
| 归档时间: |
|
| 查看次数: |
76472 次 |
| 最近记录: |