【发布时间】:2018-06-30 19:15:54
【问题描述】:
我正在进行 AES 加密,其中我将使用来自 cert 文件的密钥来初始化密码,如下所示。
encryptModeCipher = Cipher.getInstance("AES"); encryptModeCipher.init(Cipher.ENCRYPT_MODE, aesSecretKey);
但我在这里看到的问题是,我的 secretKey () 对于我使用的所有证书都保持不变。任何建议为什么?并提出一个好主意。
byte[] encryptionKey = Arrays.copyOf(encoded, 32); secretKey = new SecretKeySpec(encryptionKey, algorithm);
公共类 AESEncryptionServiceHelper {
private String algorithm = "AES";
private String certPass;
private SecretKey secretKey;
public SecretKey setKey() {
try {
certPass="****";
char[] pass = certPass.toCharArray();
KeyStore keyStore = KeyStore.getInstance("jceks");
File file = new File("D:/aws-kms-dps/***.jks");
InputStream inputStream = new FileInputStream(file);
keyStore.load(inputStream, pass);
Certificate cert = keyStore.getCertificate("****");
Key key = cert.getPublicKey();
secretKey = new SecretKeySpec(key.getEncoded(), algorithm);
byte[] encoded = secretKey.getEncoded();
byte[] encryptionKey = Arrays.copyOf(encoded, 32);
secretKey = new SecretKeySpec(encryptionKey, algorithm);
} catch (IOException e) {
System.out.println(e);
} catch (Exception e) {
System.out.println(e);
}
return secretKey;
}
public static void main(String args[]){
AESEncryptionServiceHelper aesEncryptionServiceHelper=new AESEncryptionServiceHelper();
aesEncryptionServiceHelper.setKey();
}
}
【问题讨论】:
-
证书文件中没有密钥。根据定义,其中的所有内容都是公开的,包括您从中构建所谓的“秘密密钥”的公钥。如果您使用公钥作为密钥,那么您已经处于完全不安全的状态。不清楚你在问什么,甚至在说什么。
-
是的。我对此不太清楚......我只能从证书中获取一个公钥......但不知何故我需要从中生成一个秘密密钥......建议我一个好方法
-
不,您不需要这样做,因为它不安全。你不需要做错事。可能你误解了你的要求。发回以澄清。