SecretKey
Bir bayt dizisine ( byte[]
) dönüştürebilir , ardından Base64 bunu bir String
. Yeniden a'ya dönüştürmek için SecretKey
, Base64 String'in kodunu çözün ve SecretKeySpec
orijinalinizi yeniden oluşturmak için bunu a'da kullanın SecretKey
.
Java 8 için
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());
Gizli Anahtar'a Dize:
// 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 ve öncesi için (Android dahil):
NOT I: Base64 kodlama / kod çözme kısmını atlayabilir ve sadece byte[]
SQLite'de saklayabilirsiniz . Bununla birlikte, Base64 kodlama / kod çözme işlemini gerçekleştirmek pahalı bir işlem değildir ve dizeleri neredeyse tüm veritabanlarında sorunsuz saklayabilirsiniz.
NOT II: Daha önceki Java sürümleri, java.lang
veya java.util
paketlerinden birinde Base64 içermez . Bununla birlikte, Apache Commons Codec , Bouncy Castle veya Guava'dan codec bileşenleri kullanmak mümkündür .
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)}
Gizli Anahtar'a Dize:
// 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
Anahtar nesneler ve bayt dizileri temizlenebilirken Java'da örnekleri yok etmenin açık bir yöntemi yoktur . Bu, anahtarların bellekte daha uzun süre kullanılabileceği anlamına gelir. Bir (parola korumalı)KeyStore
, tercihen çalışma zamanı sistemi / işletim sistemi tarafından desteklenen bir veya hatta donanımın kullanılması tercih edilmelidir.