密钥是20C08B06AF05D27E20E10D0AF3BC1E6D
加密前是31323334353637382013100812000000
3des加密后应该是DB FE D6 80 B0 4E 5C 46 47 35 17 55 A6 5A 92 CB换了好几个3des得到的都不是这个结果,麻烦谁给个3des加密解密算法得到这个结果。请验证后再回帖。

解决方案 »

  1.   

    条件不是很够啊。
    你试试这个在线的加密工具,每个条件试试看是否能有你说的结果。
    http://www.seacha.com/tools/3des.html
      

  2.   

    楼主要大致了解3DES加密算法的三大要素才好。
    一、 Key的长度、Java必须24位。
    二、 加密模式、Java默认ECB。
    三、 填充方式、Java默认PKCS5Padding。
    楼主尝试多次都没有得到想要的答案,应该是对这些要素不太了解。
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;public class Test13 { /**
     * 密钥是 20C08B06AF05D27E20E10D0AF3BC1E6D 
     * 加密前是 31323334353637382013100812000000
     * 3des加密后应该是 DB FE D6 80 B0 4E 5C 46 47 35 17 55 A6 5A 92 CB
     */
    public static void main(String[] args) throws Exception {
    String sKey = "20C08B06AF05D27E20E10D0AF3BC1E6D";
    String sData = "31323334353637382013100812000000";
    byte[] key = convert(sKey);
    if(key.length==16){
    byte[] newKey = new byte[24];
    System.arraycopy(key, 0, newKey, 0, key.length);
    System.arraycopy(key, 0, newKey, 16, 8);
    key = newKey;
    }
    byte[] data = convert(sData);
    SecretKey deskey = new SecretKeySpec(key, "DESede");
    Cipher cipher = Cipher.getInstance("DESede/ECB/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, deskey);
    byte[] encoded = cipher.doFinal(data);
    System.out.println(convert(encoded));
    System.out.println("DB FE D6 80 B0 4E 5C 46 47 35 17 55 A6 5A 92 CB");
    } public static final char [] HEXs = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    private static String convert(byte[] data){
    StringBuilder buff = new StringBuilder(data.length<<1);
    for(int i=0;i<data.length;i++){
    buff.append(HEXs[(data[i]&0xF0)>>4]);
    buff.append(HEXs[data[i]&0x0F]);
    buff.append(' ');
    }
    return buff.toString();
    }

    private static byte[] convert(String data){
    char[] chs = data.toCharArray();
    byte[] array = new byte[chs.length>>1];
    int b = 0;
    for(int i=0;i<chs.length;i++){
    b = chs[i]>='A'?chs[i]-'A'+10:chs[i]-'0';
    if(i%2==0){
    array[i>>1] = (byte)(b<<4);
    }else{
    array[i>>1] |= (byte)(b);
    }
    }
    return array;
    }

    }
      

  3.   

    上面代码运行结果。DB FE D6 80 B0 4E 5C 46 47 35 17 55 A6 5A 92 CB 
    DB FE D6 80 B0 4E 5C 46 47 35 17 55 A6 5A 92 CB