2012-01-18 75 views
0

我需要在CBC模式下使用Blowfish加密来加密特定字符串,而不使用Java填充。我做了一些研究,我发现这个问题:encrypting and decrypting using java在Java中以CBC模式使用Blowfish进行加密

我想知道如何在Cipher对象的init方法中使用基本字符串作为键。在这个例子中,keySpec不是一个字符串,而是一个用SHA-256加密的字符串。

在这个例子中:

cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); 

其中keySpecSecretKeySpec对象

我需要什么:

cipher.init(Cipher.ENCRYPT_MODE, keyString, ivSpec); 

其中keyStringString对象

我知道使用一个基本的条纹ng不如自动生成一个安全。但是你知道我可以如何使用字符串作为关键吗?

回答

0

这是行不通的?

SecretKey secretKey = new SecretKeySpec(keyString.getBytes(charset), "Blowfish"); 
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); 
+0

我尝试,但我有一个错误: “输入长度不是8个字节的多个” 当我做: 字节[]加密= cipher.doFinal(token.getBytes()); 令牌长度需要是8个字节的倍数? – litil 2012-01-18 16:23:08

+1

我不是Blowfish专家,互联网在今天罢工,所以我不能很快成为一个,但afaik Blowfish需要至少32位的密钥。不过,8字节的最低要求相当普遍。请问为什么你需要使用这么短的密钥? – wallenborn 2012-01-18 16:45:02

+0

我发现我的错误。我尝试加密的字符串包含22个字符,其长度应该是8的倍数。所以我认为我必须使用填充。我应该使用哪一个? (我必须使用与PERL中的标准填充相同的值) – litil 2012-01-18 18:05:00