Anda dapat mengonversi SecretKey
ke array byte ( byte[]
), lalu Base64 menyandikannya ke a String
. Untuk mengonversi kembali ke a SecretKey
, Base64 mendekode String dan menggunakannya di a SecretKeySpec
untuk 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.lang
atau 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");
String
instance 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.