代码如下:全部复制就可以运行看结果,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位长度
    }}

解决方案 »

  1.   

    对不起,上面byte[] dst = des.encrypt("passwordgo");中"passwordgo"我写错了,应该是"password"
      

  2.   

    程序运行有问题啊,抛异常了
    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)
      

  3.   

    经过DES加密以后长度是会发生改变的。如果我没有记错,DES加密后的长度是8字节的倍数,这个不会影响你的解密结果的。
      

  4.   

    DES des = new DES("password"); --这里password是密钥,是64位的
    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位的了
      

  5.   

    DES是块加密算法
    你的明文加密时要分成固定大小的块,最后不够长度的补够
      

  6.   

    DES加密结果任何长度都有可能
      

  7.   

    不对吧,应该是64bit的整数倍才对
      

  8.   

    对了,另外还有个问题,我们公司一直在这样应用DES加密(只用来加密密码):
    密码明文不能超过8位,超过八位后面用空格补齐,比如"abcdefg",变成"abcdefg ",然后用一个通用的key对明文进行加密,加密后截取前面的64位作为存储在数据库中的密码.我在怀疑这样是不是可能会有问题?
    刚刚接触DES,请各位多多指教!