JDK加密解密
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.apache.commons.codec.binary.Hex;
public class ImoocDes {
public static void main (String [] args) {
ImoocDes imoocDes = new ImoocDes();
imoocDes.jdkDes("imooc security des");
}
public void jdkDes(String password) {
try {
//生成key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
SecretKey secretKey = keyGenerator.generateKey();
byte [] bytKey = secretKey.getEncoded();
//key轉換
DESKeySpec dESKeySpec = new DESKeySpec(bytKey);?
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");//參數指定加密方式
Key secretKey1 = secretKeyFactory.generateSecret(dESKeySpec);
//加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey1);
byte[] result = cipher.doFinal(password.getBytes());
System.out.println("jdk:" + Hex.encodeHexString(result));
//解密
cipher.init(Cipher.ENCRYPT_MODE, secretKey1);
result = cipher.doFinal(result);
System.out.println("jdk:" + new String(result));
} catch (Exception e) {
e.printStackTrace();
}
}
}
上面的代碼都是按照老師的代碼寫的遇到了兩個問題請大家幫忙解答一下1
問題1多次運行時加密的結果不一樣這樣正常嗎
問題2解密的時候為什么解密結果一直是亂碼
兩次運行結果如下
第一次運行
jdk:b2f7b3a368cc58fb16e9c3fc3980c9da08cd09670b05e47d
jdk:>|V'bC( mA4?p ?d
第二次運行
jdk:ac91a46c660ce3170281f64dc17489756ad8e15169fda33d
jdk:C 03H
2015-08-27
不好意思,懂了!原來是bytKey每次運行時不一樣的原因!
byte [] bytKey = secretKey.getEncoded();