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轉(zhuǎn)換
DESKeySpec dESKeySpec = new DESKeySpec(bytKey);?
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");//參數(shù)指定加密方式
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();
}
}
}
上面的代碼都是按照老師的代碼寫的遇到了兩個(gè)問題請大家?guī)兔獯鹨幌?
問題1多次運(yùn)行時(shí)加密的結(jié)果不一樣這樣正常嗎
問題2解密的時(shí)候?yàn)槭裁唇饷芙Y(jié)果一直是亂碼
兩次運(yùn)行結(jié)果如下
第一次運(yùn)行
jdk:b2f7b3a368cc58fb16e9c3fc3980c9da08cd09670b05e47d
jdk:>|V'bC( mA4?p ?d
第二次運(yùn)行
jdk:ac91a46c660ce3170281f64dc17489756ad8e15169fda33d
jdk:C 03H
2015-08-27
不好意思,懂了!原來是bytKey每次運(yùn)行時(shí)不一樣的原因!
byte [] bytKey = secretKey.getEncoded();