用DES-JAVA加密数据
给出以下示例:用DES-JAVA加密数据,java,encryption,des,Java,Encryption,Des,给出以下示例: String f="A000000000000000"; FileInputStream fis = new FileInputStream("C:\\Users\\original.txt"); byte[] bytes = DatatypeConverter.parseHexBinary(f); SecretKey key = new SecretKeySpec(bytes, 0, bytes.length, "DES"); String strDataToEncrypt
String f="A000000000000000";
FileInputStream fis = new FileInputStream("C:\\Users\\original.txt");
byte[] bytes = DatatypeConverter.parseHexBinary(f);
SecretKey key = new SecretKeySpec(bytes, 0, bytes.length, "DES");
String strDataToEncrypt = new String();
String strCipherText = new String();
String strDecryptedText = new String();
try{
Cipher desCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
desCipher.init(Cipher.ENCRYPT_MODE,key);
//read from file and transform to String
try{
builder = new StringBuilder();
int ch;
while((ch = fis.read()) != -1){
builder.append((char)ch);
}
}catch (IOException e){
}
byte[] byteDataToEncrypt = builder.toString().getBytes();
byte[] byteCipherText = desCipher.doFinal(byteDataToEncrypt);
strCipherText = new BASE64Encoder().encode(byteCipherText);
System.out.println(strCipherText);
加密数据是不同的每次我用相同的密钥值编译时,我尝试了不同的代码,加密数据总是相同的,这里出了什么问题?部分说:
如果此密码需要任何无法使用的算法参数
从给定密钥派生的基础密码实现是
假设生成所需参数本身(使用
提供程序特定的默认值或随机值)
DES CBC(密码块链接)模式需要初始化向量(IV)。如果您不提供一个(而且您不应该提供,因为这会让您打开大门),将生成一个随机的
但如果希望加密数据每次都相同,则需要使用IvParameterSpec
指定IV:
byte[] iv = DatatypeConverter.parseHexBinary("0000000000000000");
IvParameterSpec ips = new IvParameterSpec(iv);
desCipher.init(Cipher.ENCRYPT_MODE, key, ips);
如果让它生成随机IV,则可以使用
desCipher.getIV()
检索生成的IV,除此之外,此代码不定义fis
。这意味着这段代码无法编译,意味着没有人可以复制和研究这个问题,意味着你将得到远没有那么有用的答案。这是代码的一部分,定义了ofcfis
。但是这里没有提到,问题在于加密只是为了补充,您可以使用desCipher.getIV()
检索生成的iv。这很有道理,我想如果我不添加向量,默认情况下,他会接受“000000”,干杯David@FlorentBayle谢谢很高兴知道。我已经更新了我的答案以包含它。应该是desCipher.init(Cipher.ENCRYPT_MODE,key,ips);