我正在生成密钥,需要将其存储在数据库中,因此我将其转换为字符串,但是要从字符串中获取密钥。有哪些可能的方法可以做到这一点?
我的代码是
SecretKey key = KeyGenerator.getInstance("AES").generateKey();
String stringKey=key.toString();
System.out.println(stringKey);
如何从字符串取回密钥?
您可以将转换SecretKey
为字节数组(byte[]
),然后Base64将其编码为String
。要转换回a
SecretKey
,Base64 会对String进行解码,并在a中使用它SecretKeySpec
来重建您的原始字符串SecretKey
。
字符串的SecretKey:
// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
字符串到SecretKey:
// decode the base64 encoded string
byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
// rebuild key using SecretKeySpec
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
注意I:
您可以跳过Base64编码/解码部分,而只将其存储byte[]
在SQLite中。也就是说,执行Base64编码/解码并不是一项昂贵的操作,并且您可以将字符串存储在几乎任何数据库中而不会出现问题。
注意II: 较早的Java版本在java.lang
或java.util
软件包之一中不包括Base64 。但是,可以使用Apache
Commons Codec
,Bouncy
Castle或Guava中的编解码器。
字符串的SecretKey:
// CREATE NEW KEY
// GET ENCODED VERSION OF KEY (THIS CAN BE STORED IN A DB)
SecretKey secretKey;
String stringKey;
try {secretKey = KeyGenerator.getInstance("AES").generateKey();}
catch (NoSuchAlgorithmException e) {/* LOG YOUR EXCEPTION */}
if (secretKey != null) {stringKey = Base64.encodeToString(secretKey.getEncoded(), Base64.DEFAULT)}
字符串到SecretKey:
// DECODE YOUR BASE64 STRING
// REBUILD KEY USING SecretKeySpec
byte[] encodedKey = Base64.decode(stringKey, Base64.DEFAULT);
SecretKey originalKey = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
问题内容: 我目前正在研究一种将键转换为字符串,反之亦然的方法。它适用于公钥转换,并将私钥转换为String。由于某些原因,同一代码不会将String转换回私钥,我只是无法弄清楚。 转换器代码为: 我正在使用的驱动程序代码是: 运行此命令时,我得到了不合适的密钥说明,有人可以为此指出正确的方向吗?控制台输出为: 我知道我不应该使用sun.misc。*库,我们正在研究Apache版本,但仍然想弄清楚
问题内容: 我将如何使用python将IP地址转换为十进制数字,反之亦然? 例如,对于,我想使用易于存储在数据库中的十进制或二进制形式,然后检索它。 问题答案: 将IP字符串转换为长整数: 另一种方式:
问题内容: 有没有办法将netty ByteBuf转换为String,反之亦然? 问题答案: 您可以使用转换为字符串。 您可以使用和转换为ByteBuf。
问题内容: 我必须在Android中将字节数组转换为字符串,但是我的字节数组包含负值。 如果我再次将该字符串转换为字节数组,则得到的值与原始字节数组值不同。 我该怎么做才能正确转换?我用于执行转换的代码如下: 我陷入了这个问题。 问题答案: 你的字节数组必须具有某种编码。如果你使用负值,则编码不能为ASCII。一旦弄清楚了,就可以使用以下方法将一组字节转换为字符串: 你可以使用许多编码,请查看Su
我有以下字符串格式的RSA私钥。 我正在尝试使用下面的代码片段将其转换为PrivateKey类型- 我正在犯错误- 它给我一个错误的生成私人方法。 尝试在这里使用Java的答案:将DKIM私钥从RSA转换为用于JavaMail的DER
问题内容: 在我的应用程序中,我想以字符串形式将位图图像发送到服务器,我想知道有多少种方法可以将位图转换为字符串。现在,我正在使用Base64格式进行编码和解码,它需要占用更多的内存。还有其他可能性以不同的方式做同样的事情,从而减少了内存消耗。现在我正在使用此代码。 问题答案: 这是将字符串转换为位图的相反过程,但字符串应为Base64编码