Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将字符串转换为密钥_Java_File_Encryption_Secret Key - Fatal编程技术网

在java中将字符串转换为密钥

在java中将字符串转换为密钥,java,file,encryption,secret-key,Java,File,Encryption,Secret Key,我已经使用DES算法加密了我的文件,并将tat DES Secretkey存储到数据库中,并将其转换为字符串。 现在我想将该字符串转换为Secretkey 这是代码 secret_key = KeyGenerator.getInstance("DES").generateKey(); alogrithm_specs = new IvParameterSpec(initialization_vector); // set encryption mod

我已经使用DES算法加密了我的文件,并将tat DES Secretkey存储到数据库中,并将其转换为字符串。 现在我想将该字符串转换为Secretkey

这是代码

        secret_key = KeyGenerator.getInstance("DES").generateKey();
        alogrithm_specs = new IvParameterSpec(initialization_vector);
        // set encryption mode ...
        encrypt = Cipher.getInstance("DES/CBC/PKCS5Padding");
        encrypt.init(Cipher.ENCRYPT_MODE, secret_key, alogrithm_specs);
        //out.print("actual secret_key:"+secret_key);

        String keyString = encoder.encode(secret_key.getEncoded());
        //out.print("keyString:"+keyString);

        byte[] encodedKey = decoder.decodeBuffer(keyString);
        //out.print("byte[]:"+encodedKey);

        secret_key= new SecretKeySpec(encodedKey,0,encodedKey.length, "DES");
        //out.print("after encode & decode secret_key:"+secret_key);
上述代码将字符串转换为键,如下所示:

actual secret_key: 'com.sun.crypto.provider.DESKey@1807c'

keyString:hvsCa0XcXhY=

byte[]:[B@7c91fe

after encode & decode secret_key:'javax.crypto.spec.SecretKeySpec@1807c`
我想通过将密钥转换为字符串将该Secretkey存储到数据库中。
然后,在解密时,我希望将该字符串转换回密钥。

您将看到对象类和共享同一引用的两个不同实例的哈希代码。如果要确认密钥是否正确解码,请打印解码密钥的编码版本

System.out.println("after encode & decode secret_key:" + Base64.encodeBase64String(secretKey.getEncoded()));
以下是修改后的源代码,它可能会帮助您确认密钥实际上是相同的(请注意,我在上面的代码中没有可用的ecoder和decoder声明,因此使用了标准Base64):

两个SOP中的输出相同:

actual secret_key:dYBRc0Ok6dk=
after encode & decode secret_key:dYBRc0Ok6dk=

你能详细说明一下你对代码的期望吗?“但我想将字符串转换为实际的SecretKey”在这里并不完全清楚。首先,我将DES SecretKey转换为字符串以存储在数据库中。现在我想把这个字符串转换成DES Secretkey。你能提供声明“ecoder”和“decoder”的代码吗?你打印的是对象的字符串表示,而不是它们的内容。例如,而不是
out.print(“byte[]:”+encodedKey)
应该使用out.print(“byte[]:”+Arrays.toString(encodedKey))…好的。当我解密文件时,它抛出“无效密钥异常”。嗯,无效密钥异常可能是由于不同的原因-由于IvParameterSpec初始化等等。上面的方法只会帮助您验证您存储并重新创建的密钥实际上是否有效。我建议用无效密钥异常的stacktrace打开一个新问题,我们将从那里开始?:)您可能希望通过接受答案或编辑问题以表示[已解决]来结束此问题。祝你好运
actual secret_key:dYBRc0Ok6dk=
after encode & decode secret_key:dYBRc0Ok6dk=