我是安全新手。我必须使用Java的javax.crypto.spec.SecretKeySpec加密和解密。
我在shell脚本中生成KEY和IV。通过从Java类调用shell脚本,我在我的Java代码中将KEY和IV值作为字符串获取。 我将POJO中的值设置为字符串。
现在我可以使用KEY和IV来加密和解密任何字符串吗?
请找到以下示例。
StringBuffer output = new StringBuffer();
int count= 0;
KeyIvPojo keyIv= new KeyIvPojo();
Process p;
try {
p = Runtime.getRuntime().exec("keyIv.sh -g");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
String[] lines= line.split(",");
for (String str : lines) {
if (count==0) {
keyIv.setKey(str);
System.out.println("Value of Key::::"+keyIv.getKey());
} else if (count==1) {
keyIv.setIv(str);
System.out.println("Value of Iv::::"+keyIv.getIv());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
Class KeyIvPojo {
String Key;
String Iv;
setters and getters...
}
答案 0 :(得分:0)
不,你不能,至少不会没有泄露信息。这是因为使用相同的密钥加密多个消息意味着您需要多个IV。你可以使它工作,但你不能使它完全安全。
Java完全能够创建密钥和IV,因此我不确定您使用该脚本的是什么。
Keys和IV是二进制值,它们不应该是字符串。字符串不能在Java中明确地销毁(它们是不可变的),因此使用字符串作为键是一个坏主意,即使它们是十六进制或base 64编码。