Bạn có thể chuyển đổi SecretKey
thành một mảng byte ( byte[]
), sau đó mã hóa Base64 thành a String
. Để chuyển đổi lại thành a SecretKey
, Base64 giải mã chuỗi và sử dụng nó trong a SecretKeySpec
để xây dựng lại bản gốc của bạn SecretKey
.
Đối với 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());
Chuỗi đến 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 với Java 7 trở về trước (bao gồm cả Android):
LƯU Ý I: bạn có thể bỏ qua phần mã hóa / giải mã Base64 và chỉ cần lưu trữ byte[]
trong SQLite. Điều đó nói rằng, thực hiện mã hóa / giải mã Base64 không phải là một hoạt động tốn kém và bạn có thể lưu trữ các chuỗi trong hầu hết mọi DB mà không gặp vấn đề gì.
LƯU Ý II: Các phiên bản Java trước không bao gồm Base64 trong một trong các gói java.lang
hoặc java.util
. Tuy nhiên, có thể sử dụng codec từ Apache Commons Codec , Bouncy Castle hoặc 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)}
Chuỗi đến 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
thể hiện trong Java trong khi các đối tượng chính và mảng byte có thể bị xóa. Điều này có nghĩa là các khóa có thể ở trong bộ nhớ trong một khoảng thời gian dài hơn.KeyStore
Nên ưu tiên sử dụng (được bảo vệ bằng mật khẩu) , tốt nhất là được hỗ trợ bởi hệ thống thời gian chạy / HĐH hoặc thậm chí là phần cứng.