Java中的BlowFish加密

Java中的BlowFish加密,java,blowfish,Java,Blowfish,下面的代码可以很好地使用BlowFish加密对字符串进行加密 // create a key generator based upon the Blowfish cipher KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish"); // create a key SecretKey secretkey = keygenerator.generateKey(); //

下面的代码可以很好地使用BlowFish加密对字符串进行加密

          // 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());

如果我想定义自己的密钥,我该怎么做?

河豚的密钥大小必须是32-448位。因此,有必要根据位号(4字节代表32位)和相反的顺序创建一个字节数组。

您也可以尝试此方法

String Key = "Something";
byte[] KeyData = Key.getBytes();
SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, KS);
String key = "you_key_here";
SecretKey secret_key = new SecretKeySpec(key.getBytes(), ALGORITM);
还有一点

解密:

          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);

非常感谢您的快速回答@Erik还看了看我的问题,这个解决方案是不安全的,因为它直接使用字符串作为加密密钥。@Robert,显然是的。但是请注意问题是什么(如何定义关键数据)以及答案如何以最简单的方式显示如何定义关键数据。一篇关于如何选择好的密钥的论文与一个说明如何使用特定实现的特定语法方面的答案毫无关系。这个解决方案是不安全的,因为它直接使用字符串作为加密密钥。@Robert现在你指出了一个问题,也许解释一下该怎么做会更有帮助。@TheAllchx101:简单的回答是应该使用一个键派生函数,如PBKDF2、bcrypt、scrypt或Argon2。但是,在什么配置中使用哪一个取决于多个因素。
          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);