加密:使用基于密码的加密(PBE)
我想使用PBE加密我的数据。到目前为止,我写了下面的代码:加密:使用基于密码的加密(PBE)
moteurCryptage = Cipher.getInstance("PBEWithMD5AndDES");
PBEKeySpec spécifClé=new PBEKeySpec(mdp.toCharArray());
SecretKeyFactory usineàClefs=SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey clé=null;
try {
clé = usineàClefs.generateSecret(spécifClé);
} catch (InvalidKeySpecException ex) {
Logger.getLogger(DiskUtilView.class.getName()).log(Level.SEVERE, null, ex);
}
moteurCryptage.init(Cipher.ENCRYPT_MODE,clé);
byte[] paramètresEncodage;
try {
paramètresEncodage=moteurCryptage.getParameters().getEncoded();
} catch (IOException ex) {
paramètresEncodage=null;
}
destination=moteurCryptage.update(source1.getBytes());
destination=moteurCryptage.doFinal(source2.getBytes());
moteurCryptage.init(Cipher.DECRYPT_MODE,clé,paramètresEncodage);
source=new String(moteurCryptage.doFinal(destination));
加密似乎工作(我没有得到任何错误,既不是编译也不执行期间),但Cipher
对象的解密不接受初始化javax.crypto.SecretKey
类(编译错误)。它反而要求java.security.key
。
我该怎么办?
在此先感谢您花费时间来帮助我。
的问题是线
moteurCryptage.init(Cipher.DECRYPT_MODE, cle, parametresEncodage);
这应该是
moteurCryptage.init(Cipher.DECRYPT_MODE, cle, moteurCryptage.getParameters());
而且,正如你指出的那样,则不适用于某些字符串的工作(仅适用于那些非常短的) 。问题是,当您拨打update()
时,它会将一些数据存入产生的byte[]
。当你在同一个变量上调用doFinal()
时,它会覆盖数据,并且它们永远丢失。 doFinal()
方法不会再做所有的加密,它只会完成剩余的部分!
这意味着,你
- 有你处理这些
- 之前以连接源字符串或者你有
update()
后保存destination
,使destination2
为doFinal()
,然后两者进行解密以同样的方式 -update()
destination
和doFinal()
destination2
- 也可以使
destination
和destination2
,将它们连接起来(here's how,如)成SINGL ecompleteDestination
数组,并在其上解密doFinal()
。
如果您想查看以上所有代码,只需说一句话。
好吧,它几乎可以正常工作。编译错误消失了,用“doFinal”调用实现的加密被正确解密,但是调用“update”后跟一个“doFinal”调用的“double”加密导致意想不到的结果:如果第一个字符串是“第一个字符串”,第二个字符串是“第二个字符串”,我得到的解密结果是“/q L ndstring”。 :( – Zelig63 2012-03-30 15:11:07
OH!我会在5分钟内编辑我的答案,我有解决方案。 – 2012-03-30 15:58:02
我确认一次只能加密一个字符串,所以这是我的问题的解决方案Nevertheles,这听起来很奇怪:如果使用“RSA/ECB/PKCS1Padding”进行加密,则解密后的字符串会同时包含两个字符串,看起来“update”和“doFinal”根据使用的算法而有所不同。 – Zelig63 2012-03-31 06:57:02
UFF,法国人物很难消除。而且,如果使用英文,变量名将更具可读性:)。还有一些对我们来说属于未知类型的变量。请下次尝试尽可能编译。 – 2012-03-29 15:34:33