您可以将 转换为字节数组 (),然后将其设置为 .要转换回 ,Base64 请对字符串进行解码,并在 a 中使用它来重建原始 。SecretKey
byte[]
String
SecretKey
SecretKeySpec
SecretKey
对于 Java 8
密钥到字符串:
// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());
字符串到密钥:
// decode the base64 encoded string
byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
// rebuild key using SecretKeySpec
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
对于 Java 7 及更早版本(包括 Android):
注意 I:您可以跳过 Base64 编码/解码部分,只需将 存储在 SQLite 中。也就是说,执行Base64编码/解码并不是一项昂贵的操作,您可以将字符串存储在几乎任何数据库中而不会出现问题。byte[]
注二:早期的 Java 版本在其中一个 软件包中不包含 Base64。但是,可以使用Apache Commons编解码器,Bouncy Castle或Guava中的编解码器。java.lang
java.util
密钥到字符串:
// 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)}
字符串到密钥:
// DECODE YOUR BASE64 STRING
// REBUILD KEY USING SecretKeySpec
byte[] encodedKey = Base64.decode(stringKey, Base64.DEFAULT);
SecretKey originalKey = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");