要求上送数据时要用des做加密,接收到数据后要des解密,这是我第一次接触des,有好多不明白的地方,请高人指点一下,java类库中有没有现成的类可用,如果自己写要怎么实现?在网上看了好多C程序写的,好像很难懂,而且加解密只能是8个字节,可不可以不限字节长度的呢??

解决方案 »

  1.   

    http://topic.csdn.net/t/20050307/12/3830259.html
      

  2.   

    javax.crypto这个包里有你需要的东西
      

  3.   

    谢谢楼上两位兄弟,这些我看了,我就是用了javax.crypto包中的类,加密后的字节数组发送到服务端后,解析后不对
      

  4.   

    private static final String Algorithm = "DES"; // 定义 加密算法,可用 DES,DESede,Blowfish
    // keybyte为加密密钥,长度为24字节
    // src为被加密的数据缓冲区(源)
    public static byte[] encryptMode(byte[] keybyte, byte[] src) {
    try {
    // 生成密钥
    SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
    // 加密
    Cipher c1 = Cipher.getInstance(Algorithm);
    c1.init(Cipher.ENCRYPT_MODE, deskey);
    return c1.doFinal(src);
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    return null;
    } // keybyte为加密密钥,长度为24字节
    // src为加密后的缓冲区
    public static byte[] decryptMode(byte[] keybyte, byte[] src) {
    try {
    // 生成密钥
    SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
    // 解密
    Cipher c1 = Cipher.getInstance(Algorithm);
    c1.init(Cipher.DECRYPT_MODE, deskey);
    return c1.doFinal(src);
    } catch (java.security.NoSuchAlgorithmException e1) {
    e1.printStackTrace();
    } catch (javax.crypto.NoSuchPaddingException e2) {
    e2.printStackTrace();
    } catch (java.lang.Exception e3) {
    e3.printStackTrace();
    }
    return null;
    } // 转换成十六进制字符串
    public static String byte2hex(byte[] b) {
    String hs = "";
    String stmp = "";
    for (int n = 0; n < b.length; n++) {
    stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
    if (stmp.length() == 1)
    hs = hs + "0" + stmp;
    else
    hs = hs + stmp;
    if (n < b.length - 1)
    hs = hs + ":";
    }
    return hs.toUpperCase();
    } public static void main(String[] args) {
    // 添加新安全算法,如果用JCE就要把它添加进去
    Security.addProvider(new com.sun.crypto.provider.SunJCE());
    /*byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, 0x40,
    0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55,
    0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36,
    (byte) 0xE2 };*/
    byte []keyBytes = "12345678".getBytes();
    // 24字节的密钥
    String szSrc = "hechenhui19831224";
    System.out.println("加密前的字符串:" + szSrc);
    byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
    for(int i = 0; i < encoded.length; i ++){
    System.out.print(encoded[i]);
    System.out.print(" ");
    if((i + 1) % 8 == 0){
    System.out.println("");
    }
    }
    System.out.println("加密后的字符串:" + new String(encoded));
    byte[] srcBytes = decryptMode(keyBytes, encoded);
    System.out.println("解密后的字符串:" + (new String(srcBytes)));
    }
      

  5.   

    汗,我运行的结果是对的
    加密前的字符串:hechenhui19831224
    92 62 -108 -74 77 36 -66 25 
    -63 6 -1 -5 83 83 118 24 
    18 115 79 -107 24 -18 50 74 
    加密后的字符串:\>��M$����SSvsO��2J
    解密后的字符串:hechenhui19831224