2011-03-09 21 views
10

Aşağıdaki kod, bir dizeyi BlowFish şifrelemesiyle şifrelemem için iyi çalışıyor.Java'da BlowFish ile Şifreleme

  // create a key generator based upon the Blowfish cipher 
    KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish"); 

    // create a key 
    SecretKey secretkey = keygenerator.generateKey(); 

    // create a cipher based upon Blowfish 
    Cipher cipher = Cipher.getInstance("Blowfish"); 

    // initialise cipher to with secret key 
    cipher.init(Cipher.ENCRYPT_MODE, secretkey); 

    // get the text to encrypt 
    String inputText = "MyTextToEncrypt"; 

    // encrypt message 
    byte[] encrypted = cipher.doFinal(inputText.getBytes()); 

Kendi gizli anahtarımı tanımlamak istiyorsam, bunu nasıl yaparım?

cevap

25
String Key = "Something"; 
byte[] KeyData = Key.getBytes(); 
SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish"); 
Cipher cipher = Cipher.getInstance("Blowfish"); 
cipher.init(Cipher.ENCRYPT_MODE, KS); 
+0

Teşekkür Hızlı bir yanıt çok! – StefanE

+0

@Erik ayrıca http://stackoverflow.com/questions/38007478/encrypt-and-decrypt-string-using-chacha20 – Nepster

+0

sorusuna da bakın. Bu çözüm, bir String'i doğrudan şifreleme anahtarı olarak kullandığı için güvensizdir. – Robert

0

Blowfish'in anahtar boyutu 32 - 448 bit olmalıdır. Bu nedenle bit sayısına göre bir bit dizisi (32 bit için 4 bayt) ve tam tersi yapmak gereklidir.

+0

Daha net hale getiren bazı kod satırları ekleyebilir misiniz? – Trinimon

0

Ayrıca bu

String key = "you_key_here"; 
SecretKey secret_key = new SecretKeySpec(key.getBytes(), ALGORITM); 

ve biraz daha here deneyebilirsiniz.

0
String strkey="MY KEY"; 
    SecretKeySpec key = new SecretKeySpec(strkey.getBytes("UTF-8"), "Blowfish"); 
     Cipher cipher = Cipher.getInstance("Blowfish"); 
     if (cipher == null || key == null) { 
      throw new Exception("Invalid key or cypher"); 
     } 
     cipher.init(Cipher.ENCRYPT_MODE, key); 
String encryptedData =new String(cipher.doFinal(to_encrypt.getBytes("UTF-8")); 

şifre çözme:

  SecretKeySpec key = new SecretKeySpec(strkey.getBytes("UTF-8"), "Blowfish"); 
     Cipher cipher = Cipher.getInstance("Blowfish"); 
     cipher.init(Cipher.DECRYPT_MODE, key); 
     byte[] decrypted = cipher.doFinal(encryptedData); 
     return new String(decrypted); 
+0

Bu çözüm, bir String'i doğrudan şifreleme anahtarı olarak kullandığı için güvensizdir. – Robert

+0

@Robert Şimdi bir soruna işaret ettiniz, belki bunun yerine ne yapacağını açıklamak daha yararlı olabilir. – TheRealChx101

+0

@ TheRealChx101: Kısa cevap, PBKDF2, bcrypt, scrypt veya Argon2 gibi bir anahtar türetme işlevi kullanmanız gerektiğidir. Ancak hangi konfigürasyonda hangi yapılandırmanın birden fazla faktöre bağlı olduğu. – Robert