现在有一个java写好的加密算法,要改成vb的,有什么好办法么,生成dll最好,还是只能把java代码翻译成vb代码,那样好麻烦啊

解决方案 »

  1.   

    象下面这样的vb该怎么写啊,我java不会啊public class DES {
    private int[] subkey1=new int[16];
    private int[] subkey2=new int[16]; private static final boolean[] ks={ // key shift
    false,false,true,true,true,true,true,true,
    false,true,true,true,true,true,true,false
    };
    private static final int kp[][]={{ // key permutation
    0x00000000, 0x00040000, 0x01000000, 0x01040000,
    0x00000400, 0x00040400, 0x01000400, 0x01040400,
    0x00200000, 0x00240000, 0x01200000, 0x01240000,
    0x00200400, 0x00240400, 0x01200400, 0x01240400,
    0x00000001, 0x00040001, 0x01000001, 0x01040001,
    0x00000401, 0x00040401, 0x01000401, 0x01040401,
    0x00200001, 0x00240001, 0x01200001, 0x01240001,
    0x00200401, 0x00240401, 0x01200401, 0x01240401,
    0x02000000, 0x02040000, 0x03000000, 0x03040000,
    0x02000400, 0x02040400, 0x03000400, 0x03040400,
    0x02200000, 0x02240000, 0x03200000, 0x03240000,
    0x02200400, 0x02240400, 0x03200400, 0x03240400,
    0x02000001, 0x02040001, 0x03000001, 0x03040001,
    0x02000401, 0x02040401, 0x03000401, 0x03040401,
    0x02200001, 0x02240001, 0x03200001, 0x03240001,
    0x02200401, 0x02240401, 0x03200401, 0x03240401
    },{
    0x00000000, 0x00000002, 0x00000800, 0x00000802,
    0x08000000, 0x08000002, 0x08000800, 0x08000802,
    0x00010000, 0x00010002, 0x00010800, 0x00010802,
    0x08010000, 0x08010002, 0x08010800, 0x08010802,
    0x00000100, 0x00000102, 0x00000900, 0x00000902,
    0x08000100, 0x08000102, 0x08000900, 0x08000902,
    0x00010100, 0x00010102, 0x00010900, 0x00010902,
    0x08010100, 0x08010102, 0x08010900, 0x08010902,
    0x00000010, 0x00000012, 0x00000810, 0x00000812,
    0x08000010, 0x08000012, 0x08000810, 0x08000812,
    0x00010010, 0x00010012, 0x00010810, 0x00010812,
    0x08010010, 0x08010012, 0x08010810, 0x08010812,
    0x00000110, 0x00000112, 0x00000910, 0x00000912,
    0x08000110, 0x08000112, 0x08000910, 0x08000912,
    0x00010110, 0x00010112, 0x00010910, 0x00010912,
    0x08010110, 0x08010112, 0x08010910, 0x08010912
    },{
    0x00000000, 0x00000004, 0x00001000, 0x00001004,
    0x10000000, 0x10000004, 0x10001000, 0x10001004,
    0x00000020, 0x00000024, 0x00001020, 0x00001024,
    0x10000020, 0x10000024, 0x10001020, 0x10001024,
    0x00080000, 0x00080004, 0x00081000, 0x00081004,
    0x10080000, 0x10080004, 0x10081000, 0x10081004,
    0x00080020, 0x00080024, 0x00081020, 0x00081024,
    0x10080020, 0x10080024, 0x10081020, 0x10081024,
    0x20000000, 0x20000004, 0x20001000, 0x20001004,
    0x30000000, 0x30000004, 0x30001000, 0x30001004,
    0x20000020, 0x20000024, 0x20001020, 0x20001024,
    0x30000020, 0x30000024, 0x30001020, 0x30001024,
    0x20080000, 0x20080004, 0x20081000, 0x20081004,
    0x30080000, 0x30080004, 0x30081000, 0x30081004,
    0x20080020, 0x20080024, 0x20081020, 0x20081024,
    0x30080020, 0x30080024, 0x30081020, 0x30081024
    },{
    0x00000000, 0x00100000, 0x00000008, 0x00100008,
    0x00000200, 0x00100200, 0x00000208, 0x00100208,
    0x04000000, 0x04100000, 0x04000008, 0x04100008,
    0x04000200, 0x04100200, 0x04000208, 0x04100208,
    0x00002000, 0x00102000, 0x00002008, 0x00102008,
    0x00002200, 0x00102200, 0x00002208, 0x00102208,
    0x04002000, 0x04102000, 0x04002008, 0x04102008,
    0x04002200, 0x04102200, 0x04002208, 0x04102208,
    0x00020000, 0x00120000, 0x00020008, 0x00120008,
    0x00020200, 0x00120200, 0x00020208, 0x00120208,
    0x04020000, 0x04120000, 0x04020008, 0x04120008,
    0x04020200, 0x04120200, 0x04020208, 0x04120208,
    0x00022000, 0x00122000, 0x00022008, 0x00122008,
    0x00022200, 0x00122200, 0x00022208, 0x00122208,
    0x04022000, 0x04122000, 0x04022008, 0x04122008,
    0x04022200, 0x04122200, 0x04022208, 0x04122208
    },{
    0x00000000, 0x00000200, 0x00020000, 0x00020200,
    0x00000001, 0x00000201, 0x00020001, 0x00020201,
    0x08000000, 0x08000200, 0x08020000, 0x08020200,
    0x08000001, 0x08000201, 0x08020001, 0x08020201,
    0x00200000, 0x00200200, 0x00220000, 0x00220200,
    0x00200001, 0x00200201, 0x00220001, 0x00220201,
    0x08200000, 0x08200200, 0x08220000, 0x08220200,
    0x08200001, 0x08200201, 0x08220001, 0x08220201,
    0x00000002, 0x00000202, 0x00020002, 0x00020202,
    0x00000003, 0x00000203, 0x00020003, 0x00020203,
    0x08000002, 0x08000202, 0x08020002, 0x08020202,
    0x08000003, 0x08000203, 0x08020003, 0x08020203,
    0x00200002, 0x00200202, 0x00220002, 0x00220202,
    0x00200003, 0x00200203, 0x00220003, 0x00220203,
    0x08200002, 0x08200202, 0x08220002, 0x08220202,
    0x08200003, 0x08200203, 0x08220003, 0x08220203
    },{
    0x00000000, 0x00000010, 0x20000000, 0x20000010,
    0x00100000, 0x00100010, 0x20100000, 0x20100010,
    0x00000800, 0x00000810, 0x20000800, 0x20000810,
    0x00100800, 0x00100810, 0x20100800, 0x20100810,
    0x04000000, 0x04000010, 0x24000000, 0x24000010,
    0x04100000, 0x04100010, 0x24100000, 0x24100010,
    0x04000800, 0x04000810, 0x24000800, 0x24000810,
    0x04100800, 0x04100810, 0x24100800, 0x24100810,
    0x00000004, 0x00000014, 0x20000004, 0x20000014,
    0x00100004, 0x00100014, 0x20100004, 0x20100014,
    0x00000804, 0x00000814, 0x20000804, 0x20000814,
    0x00100804, 0x00100814, 0x20100804, 0x20100814,
    0x04000004, 0x04000014, 0x24000004, 0x24000014,
    0x04100004, 0x04100014, 0x24100004, 0x24100014,
    0x04000804, 0x04000814, 0x24000804, 0x24000814,
    0x04100804, 0x04100814, 0x24100804, 0x24100814
    },{
    0x00000000, 0x00001000, 0x00010000, 0x00011000,
    0x02000000, 0x02001000, 0x02010000, 0x02011000,
    0x00000020, 0x00001020, 0x00010020, 0x00011020,
    0x02000020, 0x02001020, 0x02010020, 0x02011020,
    0x00040000, 0x00041000, 0x00050000, 0x00051000,
    0x02040000, 0x02041000, 0x02050000, 0x02051000,
    0x00040020, 0x00041020, 0x00050020, 0x00051020,
    0x02040020, 0x02041020, 0x02050020, 0x02051020,
    0x00002000, 0x00003000, 0x00012000, 0x00013000,
    0x02002000, 0x02003000, 0x02012000, 0x02013000,
    0x00002020, 0x00003020, 0x00012020, 0x00013020,
    0x02002020, 0x02003020, 0x02012020, 0x02013020,
    0x00042000, 0x00043000, 0x00052000, 0x00053000,
    0x02042000, 0x02043000, 0x02052000, 0x02053000,
    0x00042020, 0x00043020, 0x00052020, 0x00053020,
    0x02042020, 0x02043020, 0x02052020, 0x02053020
    },{
    0x00000000, 0x00000400, 0x01000000, 0x01000400,
    0x00000100, 0x00000500, 0x01000100, 0x01000500,
    0x10000000, 0x10000400, 0x11000000, 0x11000400,
    0x10000100, 0x10000500, 0x11000100, 0x11000500,
    0x00080000, 0x00080400, 0x01080000, 0x01080400,
    0x00080100, 0x00080500, 0x01080100, 0x01080500,
    0x10080000, 0x10080400, 0x11080000, 0x11080400,
    0x10080100, 0x10080500, 0x11080100, 0x11080500,
    0x00000008, 0x00000408, 0x01000008, 0x01000408,
    0x00000108, 0x00000508, 0x01000108, 0x01000508,
    0x10000008, 0x10000408, 0x11000008, 0x11000408,
    0x10000108, 0x10000508, 0x11000108, 0x11000508,
    0x00080008, 0x00080408, 0x01080008, 0x01080408,
    0x00080108, 0x00080508, 0x01080108, 0x01080508,
    0x10080008, 0x10080408, 0x11080008, 0x11080408,
    0x10080108, 0x10080508, 0x11080108, 0x11080508
    }};
            ……
      

  2.   


    所有 static 、final 直接删除。private int[] subkey1=new int[16]; 
    private int[] subkey2=new int[16]; 

    改成:
    Private subkey1(0 to 15) As Long
    Private subkey2(0 to 15) As LongJava中的 boolean 与 VB 是一样的类型。0xnnnnnnnn表示的是十六进制的数,在VB中为:&Hnnnnnnnn
      

  3.   

    private static final int kp[][]={{ // key permutation是一个二维数组,它的[][]中没有发、填数据,表示由编译器按数据量来自动计算。
    它的一组 { } 形成一维的数据[][?],由{ { },{ }, .........}决定第二维的数据[?][]。上面这个二维数组,你自己数一下数据来填。
    但 VB 中多维数组的数据存放顺序与 C/C++、Java 中不同。要完全“模仿”,请参考下面的来定义:Java:
    private static int arrA[][]= {
      {11, 12, 13, 14, 15, 16},
      {21, 22, 23, 24, 25, 26},
      {31, 32, 33, 34, 35, 36},
      {41, 42, 43, 44, 45, 46}
    }
    等效于:
    private static int arrA[4][6]= {
      {11, 12, 13, 14, 15, 16},
      {21, 22, 23, 24, 25, 26},
      {31, 32, 33, 34, 35, 36},
      {41, 42, 43, 44, 45, 46}
    }
    在 VB 中应该这样定义:
    Dim arrA(0 to 5, 0 to 3) As Long
      

  4.   

    不就是DES加解密类吗,网上一找一片~ 楼上的翻译也是对的~
      

  5.   

    这里高人很多啊,我把java源码贴在下面,方便的话请帮翻译一下,我不懂java,请高手们帮助,我自己也试着弄一下,先谢各位了,我会多给分
    算法要保持一致java代码如下:1)、DES.java文件package venus.pub.util;public class DES {
    private int[] subkey1=new int[16];
    private int[] subkey2=new int[16]; private static final boolean[] ks={ // key shift
    false,false,true,true,true,true,true,true,
    false,true,true,true,true,true,true,false
    };
    private static final int kp[][]={{ // key permutation
    0x00000000, 0x00040000, 0x01000000, 0x01040000,
    0x00000400, 0x00040400, 0x01000400, 0x01040400,
    0x00200000, 0x00240000, 0x01200000, 0x01240000,
    0x00200400, 0x00240400, 0x01200400, 0x01240400,
    0x00000001, 0x00040001, 0x01000001, 0x01040001,
    0x00000401, 0x00040401, 0x01000401, 0x01040401,
    0x00200001, 0x00240001, 0x01200001, 0x01240001,
    0x00200401, 0x00240401, 0x01200401, 0x01240401,
    0x02000000, 0x02040000, 0x03000000, 0x03040000,
    0x02000400, 0x02040400, 0x03000400, 0x03040400,
    0x02200000, 0x02240000, 0x03200000, 0x03240000,
    0x02200400, 0x02240400, 0x03200400, 0x03240400,
    0x02000001, 0x02040001, 0x03000001, 0x03040001,
    0x02000401, 0x02040401, 0x03000401, 0x03040401,
    0x02200001, 0x02240001, 0x03200001, 0x03240001,
    0x02200401, 0x02240401, 0x03200401, 0x03240401
    },{
    0x00000000, 0x00000002, 0x00000800, 0x00000802,
    0x08000000, 0x08000002, 0x08000800, 0x08000802,
    0x00010000, 0x00010002, 0x00010800, 0x00010802,
    0x08010000, 0x08010002, 0x08010800, 0x08010802,
    0x00000100, 0x00000102, 0x00000900, 0x00000902,
    0x08000100, 0x08000102, 0x08000900, 0x08000902,
    0x00010100, 0x00010102, 0x00010900, 0x00010902,
    0x08010100, 0x08010102, 0x08010900, 0x08010902,
    0x00000010, 0x00000012, 0x00000810, 0x00000812,
    0x08000010, 0x08000012, 0x08000810, 0x08000812,
    0x00010010, 0x00010012, 0x00010810, 0x00010812,
    0x08010010, 0x08010012, 0x08010810, 0x08010812,
    0x00000110, 0x00000112, 0x00000910, 0x00000912,
    0x08000110, 0x08000112, 0x08000910, 0x08000912,
    0x00010110, 0x00010112, 0x00010910, 0x00010912,
    0x08010110, 0x08010112, 0x08010910, 0x08010912
    },{
    0x00000000, 0x00000004, 0x00001000, 0x00001004,
    0x10000000, 0x10000004, 0x10001000, 0x10001004,
    0x00000020, 0x00000024, 0x00001020, 0x00001024,
    0x10000020, 0x10000024, 0x10001020, 0x10001024,
    0x00080000, 0x00080004, 0x00081000, 0x00081004,
    0x10080000, 0x10080004, 0x10081000, 0x10081004,
    0x00080020, 0x00080024, 0x00081020, 0x00081024,
    0x10080020, 0x10080024, 0x10081020, 0x10081024,
    0x20000000, 0x20000004, 0x20001000, 0x20001004,
    0x30000000, 0x30000004, 0x30001000, 0x30001004,
    0x20000020, 0x20000024, 0x20001020, 0x20001024,
    0x30000020, 0x30000024, 0x30001020, 0x30001024,
    0x20080000, 0x20080004, 0x20081000, 0x20081004,
    0x30080000, 0x30080004, 0x30081000, 0x30081004,
    0x20080020, 0x20080024, 0x20081020, 0x20081024,
    0x30080020, 0x30080024, 0x30081020, 0x30081024
    },{
    0x00000000, 0x00100000, 0x00000008, 0x00100008,
    0x00000200, 0x00100200, 0x00000208, 0x00100208,
    0x04000000, 0x04100000, 0x04000008, 0x04100008,
    0x04000200, 0x04100200, 0x04000208, 0x04100208,
    0x00002000, 0x00102000, 0x00002008, 0x00102008,
    0x00002200, 0x00102200, 0x00002208, 0x00102208,
    0x04002000, 0x04102000, 0x04002008, 0x04102008,
    0x04002200, 0x04102200, 0x04002208, 0x04102208,
    0x00020000, 0x00120000, 0x00020008, 0x00120008,
    0x00020200, 0x00120200, 0x00020208, 0x00120208,
    0x04020000, 0x04120000, 0x04020008, 0x04120008,
    0x04020200, 0x04120200, 0x04020208, 0x04120208,
    0x00022000, 0x00122000, 0x00022008, 0x00122008,
    0x00022200, 0x00122200, 0x00022208, 0x00122208,
    0x04022000, 0x04122000, 0x04022008, 0x04122008,
    0x04022200, 0x04122200, 0x04022208, 0x04122208
    },{
    0x00000000, 0x00000200, 0x00020000, 0x00020200,
    0x00000001, 0x00000201, 0x00020001, 0x00020201,
    0x08000000, 0x08000200, 0x08020000, 0x08020200,
    0x08000001, 0x08000201, 0x08020001, 0x08020201,
    0x00200000, 0x00200200, 0x00220000, 0x00220200,
    0x00200001, 0x00200201, 0x00220001, 0x00220201,
    0x08200000, 0x08200200, 0x08220000, 0x08220200,
    0x08200001, 0x08200201, 0x08220001, 0x08220201,
    0x00000002, 0x00000202, 0x00020002, 0x00020202,
    0x00000003, 0x00000203, 0x00020003, 0x00020203,
    0x08000002, 0x08000202, 0x08020002, 0x08020202,
    0x08000003, 0x08000203, 0x08020003, 0x08020203,
    0x00200002, 0x00200202, 0x00220002, 0x00220202,
    0x00200003, 0x00200203, 0x00220003, 0x00220203,
    0x08200002, 0x08200202, 0x08220002, 0x08220202,
    0x08200003, 0x08200203, 0x08220003, 0x08220203
    },{
    0x00000000, 0x00000010, 0x20000000, 0x20000010,
    0x00100000, 0x00100010, 0x20100000, 0x20100010,
    0x00000800, 0x00000810, 0x20000800, 0x20000810,
    0x00100800, 0x00100810, 0x20100800, 0x20100810,
    0x04000000, 0x04000010, 0x24000000, 0x24000010,
    0x04100000, 0x04100010, 0x24100000, 0x24100010,
    0x04000800, 0x04000810, 0x24000800, 0x24000810,
    0x04100800, 0x04100810, 0x24100800, 0x24100810,
    0x00000004, 0x00000014, 0x20000004, 0x20000014,
    0x00100004, 0x00100014, 0x20100004, 0x20100014,
    0x00000804, 0x00000814, 0x20000804, 0x20000814,
    0x00100804, 0x00100814, 0x20100804, 0x20100814,
    0x04000004, 0x04000014, 0x24000004, 0x24000014,
    0x04100004, 0x04100014, 0x24100004, 0x24100014,
    0x04000804, 0x04000814, 0x24000804, 0x24000814,
    0x04100804, 0x04100814, 0x24100804, 0x24100814
    },{
    0x00000000, 0x00001000, 0x00010000, 0x00011000,
    0x02000000, 0x02001000, 0x02010000, 0x02011000,
    0x00000020, 0x00001020, 0x00010020, 0x00011020,
    0x02000020, 0x02001020, 0x02010020, 0x02011020,
    0x00040000, 0x00041000, 0x00050000, 0x00051000,
    0x02040000, 0x02041000, 0x02050000, 0x02051000,
    0x00040020, 0x00041020, 0x00050020, 0x00051020,
    0x02040020, 0x02041020, 0x02050020, 0x02051020,
    0x00002000, 0x00003000, 0x00012000, 0x00013000,
    0x02002000, 0x02003000, 0x02012000, 0x02013000,
    0x00002020, 0x00003020, 0x00012020, 0x00013020,
    0x02002020, 0x02003020, 0x02012020, 0x02013020,
    0x00042000, 0x00043000, 0x00052000, 0x00053000,
    0x02042000, 0x02043000, 0x02052000, 0x02053000,
    0x00042020, 0x00043020, 0x00052020, 0x00053020,
    0x02042020, 0x02043020, 0x02052020, 0x02053020
    },{
    0x00000000, 0x00000400, 0x01000000, 0x01000400,
    0x00000100, 0x00000500, 0x01000100, 0x01000500,
    0x10000000, 0x10000400, 0x11000000, 0x11000400,
    0x10000100, 0x10000500, 0x11000100, 0x11000500,
    0x00080000, 0x00080400, 0x01080000, 0x01080400,
    0x00080100, 0x00080500, 0x01080100, 0x01080500,
    0x10080000, 0x10080400, 0x11080000, 0x11080400,
    0x10080100, 0x10080500, 0x11080100, 0x11080500,
    0x00000008, 0x00000408, 0x01000008, 0x01000408,
    0x00000108, 0x00000508, 0x01000108, 0x01000508,
    0x10000008, 0x10000408, 0x11000008, 0x11000408,
    0x10000108, 0x10000508, 0x11000108, 0x11000508,
    0x00080008, 0x00080408, 0x01080008, 0x01080408,
    0x00080108, 0x00080508, 0x01080108, 0x01080508,
    0x10080008, 0x10080408, 0x11080008, 0x11080408,
    0x10080108, 0x10080508, 0x11080108, 0x11080508
    }};
            ……
    这个数组太长了,放不下,就写一段吧
      

  6.   

    接上:/**
     *
     * 按照key进行初始化本算法
     */
    public DES(long key) {
    setKey(key);
    }
    /**
     *
     * 将一个8字节数组转变成一个长整形。
     */
    public long bytes2long(byte[] rd) {
    long dd=0;
    for (int i=0; i<=7; i++)
    dd=(dd<<8)|((long)rd[i]&0xff);
    return dd;
    }
    /**
     * 解密
     * @param long d  密文
     *  @return long  明文
     */
    public long decrypt(long d) {
    d=ip(d);
    int l=(int)(d>>>32);
    int r=(int)d; for (int i=15; i>=0; i--) {
    int t=l;
    l=r;
    r=t;
    int t1=((r>>>3)|(r<<29))^subkey1[i];
    int t2=((r<<1)|(r>>>31))^subkey2[i];
    l^=spbox[0][(t1>>>24)&0x3f] | spbox[1][(t2>>>24)&0x3f] |
    spbox[2][(t1>>>16)&0x3f] | spbox[3][(t2>>>16)&0x3f] |
    spbox[4][(t1>>> 8)&0x3f] | spbox[5][(t2>>> 8)&0x3f] |
    spbox[6][(t1     )&0x3f] | spbox[7][(t2     )&0x3f];
    } d=((long)l<<32) | ((long)r&0xffffffffL);
    return rip(d);
    }
    /**
     * 加密
     * @param long d  明文
     *  @return long  密文
     */
    public long encrypt(long d) {
    d=ip(d);
    int l=(int)(d>>>32);
    int r=(int)d; for (int i=0; i<=15; i++) {
    int t1=((r>>>3)|(r<<29))^subkey1[i];
    int t2=((r<<1)|(r>>>31))^subkey2[i];
    l^=spbox[0][(t1>>>24)&0x3f] | spbox[1][(t2>>>24)&0x3f] |
    spbox[2][(t1>>>16)&0x3f] | spbox[3][(t2>>>16)&0x3f] |
    spbox[4][(t1>>> 8)&0x3f] | spbox[5][(t2>>> 8)&0x3f] |
    spbox[6][(t1     )&0x3f] | spbox[7][(t2     )&0x3f];
    int t=l;
    l=r;
    r=t;
    } d=((long)l<<32) | ((long)r&0xffffffffL);
    return rip(d);
    }
    /**
     * initial permutation
     */
    private long ip(long d) {
    long t;
    t=((d<<36)^d)&0xf0f0f0f000000000L;
    d^=(t>>>36)|t;
    t=((d<<48)^d)&0xffff000000000000L;
    d^=(t>>>48)|t;
    t=((d<<30)^d)&0x3333333300000000L;
    d^=(t>>>30)|t;
    t=((d<<24)^d)&0x00ff00ff00000000L;
    d^=(t>>>24)|t;
    t=((d<<33)^d)&0xaaaaaaaa00000000L;
    d^=(t>>>33)|t;
    return d;
    }
    /**
     *
     * 将long sd变成一个数组
     */
    public void long2bytes(long sd,byte[] dd) {
    for (int i=7; i>=0; i--) {
    dd[i]=(byte)sd;
    sd>>>=8;
    }
    }
    /**
     * reverse initial permutation
     */
    private long rip(long d) {
    long t;
    t=((d<<33)^d)&0xaaaaaaaa00000000L;
    d^=(t>>>33)|t;
    t=((d<<24)^d)&0x00ff00ff00000000L;
    d^=(t>>>24)|t;
    t=((d<<30)^d)&0x3333333300000000L;
    d^=(t>>>30)|t;
    t=((d<<48)^d)&0xffff000000000000L;
    d^=(t>>>48)|t;
    t=((d<<36)^d)&0xf0f0f0f000000000L;
    d^=(t>>>36)|t;
    return d;
    }
    /**
     * 设置密钥
     *
     */
    public void setKey(long key) {
    long t;
    t=((key<<36)^key)&0xf0f0f0f000000000L;
    key^=(t>>>36)|t;
    t=((key<<18)^key)&0xcccc0000cccc0000L;
    key^=t|(t>>>18);
    t=((key<< 9)^key)&0xaa00aa00aa00aa00L;
    key^=t|(t>>> 9); int d=(int)((key>>>28)&0x0ffffff0 | (key>>>24)&0x0000000f);
    int c=(int)((key<< 20)&0x0ff00000 | (key<<  4)&0x000ff000 | 
    (key>>>12)&0x00000ff0 | (key>>>28)&0x0000000f);

    for (int i=0; i<16; i++) {
    if (ks[i]) {
    c=((c<<2)|(c>>>26))&0x0fffffff;
    d=((d<<2)|(d>>>26))&0x0fffffff;
    } else {
    c=((c<<1)|(c>>>27))&0x0fffffff;
    d=((d<<1)|(d>>>27))&0x0fffffff;
    }
    int t1=kp[0][(c>>>22)&0x3f] |
    kp[1][(c>>>16)&0x30 | (c>>>15)&0x0f] |
    kp[2][(c>>> 9)&0x3c | (c>>> 8)&0x03] |
    kp[3][(c>>> 3)&0x20 | (c>>> 1)&0x18 | c&0x07];
    int t2=kp[4][(c>>>22)&0x3f] |
    kp[5][(c>>>15)&0x30 | (c>>>14)&0x0f] |
    kp[6][(c>>> 7)&0x3f] |
    kp[7][(c>>> 1)&0x3c | c&0x03];
    subkey1[i]=(t1&0xff000000) | ((t1&0x0000ff00)<<8) |
    ((t2&0xff000000)>>>16) | ((t2&0x0000ff00)>>>8);
    subkey2[i]=((t1&0x00ff0000)<<8) | ((t1&0x000000ff)<<16) |
    ((t2&0x00ff0000)>>>8) | (t2&0x000000ff);
    }
    }
    }
      

  7.   

    这回遇到麻烦了:Java中的Long类型的整数,是64位的!在VB中,又不能用Doubl来替代它。
      

  8.   

    我看楼主还是用C++弄个 DLL 来处理吧。如果有大量的数据来加密/解密,可能用VB(还要用‘变通’的方法来处理64位整数),速度会有点慢。
      

  9.   

    哈哈,没想到C++中的long整数也是32位的!看来也不用 C++ 的 DLL 了。楼主还是想法翻译成VB吧 ^_^
      

  10.   

    这位兄台为什么不直接去找个DES的VB算法程序呢?
    http://www.google.cn/search?hl=zh-CN&q=DES+VB&meta=&aq=f
      

  11.   

    VB中好象没有64位的整数类型数据(我的印象中没有)。
    这个只有用自定义类型来代替。对64位的数据进行位运算,所有的位操作都要写一个函数来实现。
    “>>>”是无符号右移位,数据的低位丢弃,高位补 0 。
    “<<” 是左移位,数据的高位丢弃,低位补 0 。
    & 是‘位与’运算,Integer/Long用 And 来运算。
    | 是‘位或’运算,Integer/Long用 Or 来运算。
    ^ 是‘位异或’运算,Integer/Long用 Xor 来运算。
      

  12.   

    看来vb太麻烦了,其实用其他语言生成dll也行,用vb翻译过来,最后也要做成dll,用C#可以么,能生成dll么,还是其他语言更好
      

  13.   

    楼主以为des算法是私有的吗?哪个des应用不是双方一致的,最多改一下des的明码表就可以匹配了。
      

  14.   

    可以吧!
    用四个 Integer 或二个 Long 来拼接。反正位操作运算都要自己写函数的。
      

  15.   

    jennyvenus你可能误会了,我们现有两个软件系统,前一个是java做的,现在用vb另做了一个,但要共用一个数据库,因为已经用java写好的加密算法,所以vb做的这个软件也要用原来那个加密算法,而且不能去改动原来的java程序,vb又不能调用java包,因此才要把它的算法用vb翻译过来。
    你说的“最多改一下des的明码表”不太理解
      

  16.   

    VB中用currency类型,是64位的,运算完,乘以10000就是整数!
      

  17.   

    如果赋值给long型溢出
    可以这样处理:
    Dim c As Currency
    c = 92233720368.111
    Dim l As String
    l = Replace(CStr(c), ".", "")
    Debug.Print l
      

  18.   

    可以,currency类型是定点小数,内部处理实际上是用整数的处理方式处理的,在输出时,除以10000得来的
    和浮点数不一样!
      

  19.   

    LS在26楼举的例子好象没有实际的价值。你试一下:
    就拿你举的那个 Currency 类型的变量 C 来说,要把它“左移23位”,应该如何操作?
    (注意:C 可以为‘合法“的任意值)
      

  20.   

    我觉得还是用byte()数组比较好,不过处理的时候要4字节来处理了。
      

  21.   

    我确实不明白你费力这么做的原因,des算法是公开的,虽然听说有非标准的des,但是我遇到过的des算法都是一样的,否则不会有“硬des”的说法了。
      

  22.   


    自定义函数来实现移位肯定是必须的。
    也许是没说清楚,举个实例吧:
    比如 C 的值为某特定值时,它的二进制数据如下:
    0x001053CA05519D01
    左移23位后,变成:
    0xE502A8CE80080000如何对 Currency 类型的变量 C 实现这个操作?
      

  23.   

    对于 Integer、Long 类型的数据,我以前就写了函数来实现左移、右移位、循环移位。我觉得对这个 64位 的数据,用两个 Long 类型的自定义类型来实现移位,以及其它的位操作,都能够实现。但对 Currency 类型的数据实现这些操作,恐怕不容易。
      

  24.   

    Currency和integer、long是一样的,我都说过,处理方式和long ,integer一样
    言尽于此,不在赘述
      

  25.   

    多谢各位,我现在想到一个新方法,就是用java写个websevice,然后在vb中调这个服务,这样就不用翻译代码了,否则太麻烦了,这样行不