将密钥转换为字符串和副词 [英] Converting Secret Key into a String and Vice Versa
问题描述
我的代码是
SecretKey key = KeyGenerator.getInstance(AES)。generateKey();
String stringKey = key.toString();
System.out.println(stringKey);
如何从String中获取密钥?
您可以将 SecretKey
转换为字节数组( byte []
),然后Base64将其编码为 String
。要转换回 SecretKey
,Base64解码字符串,并在 SecretKeySpec
中重新构建您的原始 SecretKey
。
对于Java 8
SecretKey to字符串:
//创建新密钥
SecretKey secretKey = KeyGenerator.getInstance(AES) .generateKey();
//获取base64编码版本的密钥
String encodedKey = Base64.getEncoder()。encodeToString(secretKey.getEncoded());
String到SecretKey:
//解码base64编码的字符串
byte [] decodedKey = Base64.getDecoder()。decode(encodedKey);
//使用SecretKeySpec
重建密钥SecretKey originalKey = new SecretKeySpec(decodedKey,0,decodedKey.length,AES);
对于Java 7和之前(包括Android):
注意:可以跳过Base64编码/解码部分,只存储字节[]
在SQLite。也就是说,执行Base64编码/解码不是一项昂贵的操作,您可以在几乎任何数据库中存储字符串,无任何问题。
注意II:早期的Java版本在 java.lang
或 java.util
包之一中不包括Base64。然而,可以使用 Apache Commons编解码器的编解码器, Bouncy Castle 或 Guava
SecretKey to String:
code> // CREATE NEW KEY
//获取编码的密钥(这可以存储在数据库中)
SecretKey secretKey;
String stringKey;
尝试{secretKey = KeyGenerator.getInstance(AES)。generateKey();}
catch(NoSuchAlgorithmException e){/ * LOG YOUR EXCEPTION * /}
if(secretKey!= null){stringKey = Base64.encodeToString(secretKey.getEncoded(),Base64.DEFAULT)}
String到SecretKey:
//解码你的BASE64 STRING
// REBUILD KEY USING SecretKeySpec
byte [] encodedKey = Base64.decode(stringKey,Base64.DEFAULT);
SecretKey originalKey = new SecretKeySpec(encodedKey,0,encodedKey.length,AES);
I am generating a key and need to store it in DB, so I convert it into a String, but to get back the key from the String. What are the possible ways of accomplishing this?
My code is,
SecretKey key = KeyGenerator.getInstance("AES").generateKey();
String stringKey=key.toString();
System.out.println(stringKey);
How can I get the key back from the String?
You can convert the SecretKey
to a byte array (byte[]
), then Base64 encode that to a String
. To convert back to a SecretKey
, Base64 decode the String and use it in a SecretKeySpec
to rebuild your original SecretKey
.
For Java 8
SecretKey to String:
// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
String to 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");
For Java 7 and before (including Android):
NOTE I: you can skip the Base64 encoding/decoding part and just store the byte[]
in SQLite. That said, performing Base64 encoding/decoding is not an expensive operation and you can store strings in almost any DB without issues.
NOTE II: Earlier Java versions do not include a Base64 in one of the java.lang
or java.util
packages. It is however possible to use codecs from Apache Commons Codec, Bouncy Castle or Guava.
SecretKey to String:
// 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)}
String to 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");
这篇关于将密钥转换为字符串和副词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!