使用java javax.crypto.spec.SecretKeySpec加密/解密

时间:2018-02-05 16:35:12

标签: java cryptography secret-key

我是安全新手。我必须使用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...

}

1 个答案:

答案 0 :(得分:0)

不,你不能,至少不会没有泄露信息。这是因为使用相同的密钥加密多个消息意味着您需要多个IV。你可以使它工作,但你不能使它完全安全。

Java完全能够创建密钥和IV,因此我不确定您使用该脚本的是什么。

Keys和IV是二进制值,它们不应该是字符串。字符串不能在Java中明确地销毁(它们是不可变的),因此使用字符串作为键是一个坏主意,即使它们是十六进制或base 64编码。