2012-02-27 88 views
2

我正在运行从互联网上获得的java字符串加密/解密类!这里是几乎没有修改的类:产生不同输出的字符串加密/解密类

public class EncrypterDecrypter { Cipher ecipher; 密码dcipher;

EncrypterDecrypter(SecretKey key) 
{ 
    try { 
     ecipher = Cipher.getInstance("DES"); 
     dcipher = Cipher.getInstance("DES"); 
     ecipher.init(Cipher.ENCRYPT_MODE, key); 
     dcipher.init(Cipher.DECRYPT_MODE, key); 

    } catch (javax.crypto.NoSuchPaddingException e) { 
    } catch (java.security.NoSuchAlgorithmException e) { 
    } catch (java.security.InvalidKeyException e) { 
    } 
} 

}

公共类EncryptionTester {

public static void main(String[] args) 
{ 
    try 
    { 
     //Generate a temporary key. 
     SecretKey key = KeyGenerator.getInstance("DES").generateKey(); 

     //Create Encrypter/Decrypter class 
     EncrypterDecrypter crypto = new EncrypterDecrypter(key); 

     //More lines of code to use crypto object 
    } 
    catch (Exception e) 
    { 
    } 
} 

}

我的问题是,每次我创建EncrypterDecrypter类的一个新实例,我得到加密的字符串型动物尚字符串加密仍然是一样的!我的头脑告诉我,问题是每当创建一个新实例时SecretKey对象不断变化,我想知道如何使SecretKey对象对于所有Encrypter/Decrypter类的实例都是相同的问题的原因!

+0

要发布的相关代码将是初始化“EncrypterDecrypter”对象的行。你在通过什么“钥匙”? – dlev 2012-02-27 06:56:02

+0

你是对的我修改了代码!我正在通过DES密钥算法! – Xris 2012-02-27 07:11:22

回答

1

如果您使用的javax.crypto包,然后加密和decryp方法看行不行。 尝试生成密钥这样的:

final SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); 
final SecretKey key = skf.generateSecret(new DESKeySpec(new byte [] {/*The key*/})); 
instance.EncrypterDecrypter(key);      //Initialization of your Cipher objects 
String encrypted = instance.encrypt("This is a test"); 
System.out.println(instance.decrypt(encrypted));  //"This is a test" 

你应该做的事渔获。

+0

DESKeySpec是哪个软件包? – Xris 2012-02-27 07:32:38

+0

找到该产品:javax.crypto.spec – Jerome 2012-02-27 07:44:17

+0

什么是关键?钥匙的尺寸是否有限? Thanx – Xris 2012-02-27 07:49:43

1

从字节数组生成SecretKey的..

byte raw[] = new byte[]{0x001,0x002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002,0X002}; 
     SecretKeySpec spec = new SecretKeySpec(raw, "DES");