Anda dapat mengonversi SecretKeyke array byte ( byte[]), lalu Base64 menyandikannya ke a String. Untuk mengonversi kembali ke a SecretKey, Base64 mendekode String dan menggunakannya di a SecretKeySpecuntuk membangun kembali aslinya SecretKey.
Untuk Java 8
SecretKey ke 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 ke 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");
Untuk Java 7 dan sebelumnya (termasuk Android):
CATATAN I: Anda dapat melewati bagian encoding / decoding Base64 dan hanya menyimpannya byte[]di SQLite. Meskipun demikian, melakukan encoding / decoding Base64 bukanlah operasi yang mahal dan Anda dapat menyimpan string di hampir semua DB tanpa masalah.
CATATAN II: Versi Java sebelumnya tidak menyertakan Base64 di salah satu paket java.langatau java.util. Namun, Anda dapat menggunakan codec dari Apache Commons Codec , Bouncy Castle, atau Guava .
SecretKey ke 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 ke 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");
Stringinstance di Java sementara objek kunci dan array byte mungkin dihapus. Artinya, kunci dapat tetap tersedia dalam memori untuk jangka waktu yang lebih lama. Menggunakan (dilindungi kata sandi)KeyStore, sebaiknya yang didukung oleh sistem runtime / OS atau bahkan perangkat keras harus lebih disukai.