2

我已经使用 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`

我想通过将密钥转换为字符串来将该密钥存储到数据库中。然后在解密时我想将该字符串转换回密钥。

4

1 回答 1

1

您会看到对象类和 2 个不同实例的哈希码共享相同的引用。如果您想确认您的密钥是否正确解码,请打印已解码密钥的编码版本。

System.out.println("after encode & decode secret_key:" + Base64.encodeBase64String(secretKey.getEncoded()));

这是修改后的源代码,可以帮助您确认密钥实际上是相同的(请注意,我在上面的代码中没有可用的编码器和解码器声明,因此使用了标准的 Base64):

SecretKey secretKey;
        String stringKey;
        try {
            secretKey = KeyGenerator.getInstance("DES").generateKey();
            // byte[] initialization_vector;
            // IvParameterSpec alogrithm_specs = new
            // IvParameterSpec(initialization_vector);
            // set encryption mode ...
            Cipher encrypt = Cipher.getInstance("DES/CBC/PKCS5Padding");
            encrypt.init(Cipher.ENCRYPT_MODE, secretKey);

            if (secretKey != null) {
                stringKey = Base64.encodeBase64String(secretKey.getEncoded());
                System.out.println("actual secret_key:" + stringKey);

                byte[] encodedKey = Base64.decodeBase64(stringKey);

                // out.print("byte[]:"+encodedKey);

                secretKey = new SecretKeySpec(encodedKey, 0, encodedKey.length,
                        "DES");
                System.out.println("after encode & decode secret_key:"
                        + Base64.encodeBase64String(secretKey.getEncoded()));
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

两个 sops 中的输出是相同的:

actual secret_key:dYBRc0Ok6dk=
after encode & decode secret_key:dYBRc0Ok6dk=
于 2013-12-29T11:53:43.800 回答