24 Nisan 2019 Çarşamba

JCA Cipher Sınıfı - Simetrik ve Asimetrik Şifreleme İçindir

Giriş
Şu satırı dahil ederiz.
import javax.crypto.Cipher;
Kullanım
1. getInstance() metodu ile istenilen algoritmaı gerçekleştiren Cipher nesnesi elde edilir
2. Simetrik şifreleme için SecretKey ile başlatılır. Şöyle yaparız
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(new SecureRandom());
SecretKey secretKey = keyGenerator.generateKey();

// Initialize the Cipher for Encryption
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
Şifreleme için doFinal metod çağrılır. Şöyle yaparız
String str = ...;
byte[] encryptedData = cipher.doFinal(str.getBytes());
Açma için  şöyle yaparız
SecretKey secretKey = ...;

byte[] encryptedData = ...;
        
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
getInstance metodu
DES
Şöyle yaparız.
Cipher desCipher = Cipher.getInstance("DES");
Şöyle yaparız
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
3DES
Şöyle yaparız.
Cipher cipher = Cipher.getInstance("PBEWithSHA1AndDESede");
AES
AES yazısına taşıdım.

RSA
Şöyle yaparız
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Şöyle yaparız.
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding"); 
SecretKey
SecretKey ile şöyle elde etmek için şöyle yaparız.
SecretKey key = ...;
Cipher cipher = Cipher.getInstance(key.getAlgorithm());
init metodu - encrypt
Key nesnesi alır. Simetrik şifreleme için Key arayüzünden kalıtan SecretKey nesnesi kullanılır.
Örnek
Şöyle yaparız.
SecretKey key = ...;
cipher.init(Cipher.ENCRYPT_MODE, key);
Örnek
Asimetrik şifreleme için Key arayüzünden kalıtan PublicKey nesnesi kullanılır. Şöyle yaparız.
RSAPublicKey eServer = (RSAPublicKey) cert.getPublicKey();
cipher.init(Cipher.ENCRYPT_MODE, eServer);
init metodu - encrypt
Key + AlgorithmParameters nesnesi alır.
Örnek
Şöyle yaparız.
SecretKey secretKey = ...
PBEParameterSpec pbeParameterSpec = ...
cipher.init(Cipher.ENCRYPT_MODE, secretKey, pbeParameterSpec);
init metodu - decrypt
Key nesnesi alır.
Örnek
Şifreyi açmak için şöyle yaparız.
SecretKey myDesKey = ...;
cipher.init(Cipher.DECRYPT_MODE, myDesKey);
x.509 sertifikası için şöyle yapabiliriz.
PrivateKey key = ...;
cipher.init(Cipher.DECRYPT_MODE, key);
init metodu - decrypt
Key + AlgorithmParameters nesnesi alır.
Örnek
İstenirse salt verilebilir.
byte[] salt = ...;
cipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(salt, 20));
Örnek
Salt şöyle de verilebilir.
byte[] salt = {...};
int iterationCount = 2;
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);

cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
Örnek
AES ile spec kullanılıyor.
IvParameterSpec ivspec = ...;
SecretKeySpec keyspec = ...;
Cipher cipher = ...;
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
doFinal metodu - encrypt
init metodu ile nesnenin nasıl ilklendirildiğine bağlı olarak belirtilen byte'ları şifreler veya açar. Şifrelemek için şöyle yaparız.
byte[] text = ...;
byte[] textEncrypted = desCipher.doFinal(text);
doFinal metodu - decrypt
Açma için şöyle yaparız.
byte[] textEncrypted = ...;
byte[] textDecrypted = desCipher.doFinal(textEncrypted);

Hiç yorum yok:

Yorum Gönder