代码如下:全部复制就可以运行看结果,import javax.crypto.*;
import javax.crypto.spec.*;
public class DES {
Cipher ecipher; DES(String passPhrase) {
try {
SecretKeySpec key = new SecretKeySpec(passPhrase.getBytes(),"DES");
ecipher = Cipher.getInstance(key.getAlgorithm()); ecipher.init(Cipher.ENCRYPT_MODE, key);
} catch (Exception e) {
e.printStackTrace();
}
} //加密方法
public byte[] encrypt(String str) {
try {
byte[] enc = ecipher.doFinal(str.getBytes());
return enc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
DES des = new DES("password");
byte[] dst = des.encrypt("passwordgo");
System.out.println(dst.length);//这里打印出来的结果位16,即128位长度
}}
import javax.crypto.spec.*;
public class DES {
Cipher ecipher; DES(String passPhrase) {
try {
SecretKeySpec key = new SecretKeySpec(passPhrase.getBytes(),"DES");
ecipher = Cipher.getInstance(key.getAlgorithm()); ecipher.init(Cipher.ENCRYPT_MODE, key);
} catch (Exception e) {
e.printStackTrace();
}
} //加密方法
public byte[] encrypt(String str) {
try {
byte[] enc = ecipher.doFinal(str.getBytes());
return enc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
DES des = new DES("password");
byte[] dst = des.encrypt("passwordgo");
System.out.println(dst.length);//这里打印出来的结果位16,即128位长度
}}
java.lang.NullPointerException
at csdn.DES.encrypt(DES.java:24)
at csdn.DES.main(DES.java:34)
Exception in thread "main" java.lang.NullPointerException
at csdn.DES.main(DES.java:35)
byte[] dst = des.encrypt("passwordgo"); --这里passwordgo是将被加密的内容
System.out.println(dst.length);//这里打印出来的结果位16,即128位长度
--第三句产生的dst是加密后的内容,长度是由加密前的内容passwordgo的长度而定的,如果要加密的内容是password的话,因为password本身就是64位的,加上较验码(每7位产生一位,产生较验码并填充空位后长度应为70位),加密后长度肯定就超过64位的长度了,因为加密后的内容长度是密钥的整数倍,所以是128位就不足为奇了.如果被加密的内容是passwor(产生较验码后长度刚好是64位)的话,加密后的长度就是64位的了
你的明文加密时要分成固定大小的块,最后不够长度的补够
密码明文不能超过8位,超过八位后面用空格补齐,比如"abcdefg",变成"abcdefg ",然后用一个通用的key对明文进行加密,加密后截取前面的64位作为存储在数据库中的密码.我在怀疑这样是不是可能会有问题?
刚刚接触DES,请各位多多指教!