Java 256-bit AES Şifre Tabanlı Şifreleme
256-bit AES şifreleme uygulamak istiyorum, ama online bulunan tüm örnekler, bir" 256 bitlik bir anahtar oluşturmak için, ama benim kendi geçiş anahtarı kullanmak istiyorum. "KeyGenerator Nasıl kendi anahtarımı oluşturabilir miyim? Bunun dışında 256 bit doldurma denedim, ama sonra bir hata anahtarı çok uzun olduğunu söylediler. Sınırsız yetki yama yüklü, sorun değil:) var
Yani. Bu KeyGenerator bu ... gibi görünüyor
// Get the KeyGenerator
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128); // 192 and 256 bits may not be available
// Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
EDİT
Aslında şifre çok uzun olan 256 byte, bit, dolgu yaptım. Aşağıda bu biraz daha deneyim ben şimdi kullanıyorum herhangi bir koddur.
byte[] key = null; // TODO
byte[] input = null; // TODO
byte[] output = null;
SecretKeySpec keySpec = null;
keySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
output = cipher.doFinal(input)
"Kendine yapman gereken bit: -) YAPILACAK
CEVAP
Paylaş password
(char[]
) ve salt
byte[]
- 8 bayt tarafından seçilen bir SecureRandom
iyi bir tuz-hangi gerekmez saklı tutulması) ile alıcı bant dışı. Bu bilgilerden iyi bir anahtar türetmek için (Java 6):
/* Derive the key, given password and salt. */
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(password, salt, 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
/* Encrypt the message. */
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] ciphertext = cipher.doFinal("Hello, World!".getBytes("UTF-8"));
ciphertext
iv
mağaza. Şifre çözme, SecretKey
tam olarak aynı şekilde, aynı tuz ile Şifreyi kullanarak ve yineleme parametrelerini kullanarak yeniden oluşturulur. Bu anahtar ile şifre başlatılamadıvebaşlatma vektörü mesaj saklı:
/* Decrypt the message, given derived key and initialization vector. */
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
String plaintext = new String(cipher.doFinal(ciphertext), "UTF-8");
System.out.println(plaintext);
Java 7 AEAD şifreleme modları için API desteği dahil, ve "" sağlayıcı OpenJDK ve Oracle dağılımları ile birlikte bu Java 8 ile başlıyor. uygular SunJCE, Bu modu, güçlü bir CBC yerine tavsiye edilir; veri bütünlüğünün yanı sıra onların gizliliğini koruyacak.
İleti java.security.InvalidKeyException
"boyutu veya Varsayılan parametreleri Geçersiz anahtar" şifreleme gücü anlamına gelirsınırlı, sınırsız gücü, yargı ilkesi dosyaları doğru konumda değil. Bir İLGİLENİYORUZ, ${jdk}/jre/lib/security
altında yerleştirilmelidir
Sorun açıklaması göre, politika dosyaları düzgün yüklenmemiş gibi görünüyor. Sistemleri kolayca birden çok Java çalışma zamanları olabilir; çift kontrol doğru yerde kullanıldığından emin olun.
Nasıl Java 3des şifreleme/şifre çözme ...
Zaman Java tabanlı dolacak tuşları ile...
Nasıl parola korumalı bir Java anahtar...
Java nasıl bir şifre karma miyim?...
Java standart Sükunet harita tabanlı b...