本帖最后由 bcrun 于 2012-09-19 10:23:59 编辑

解决方案 »

  1.   

    初始化的indata=D768F6EF1D8C102A,keyl=746F6F7470617948,加密结果是C9EF4CF9C5FD3CCB,无论我怎么改怎么调用都得不到C9EF4CF9C5FD3CCB这个结果,请高手们给我指一下,非常着急。
      

  2.   

    你的字符串和key应该是byte数组的16进制字符,要转换了调用
    要可靠可以使用CAPICOM
      

  3.   

    加密:
    s1 = "D768F6EF1D8C102A"
    key1 = "746F6F7470617948"
    Dim byt1() As Byte, bytK1() As Byte
    byt1 = HexToBinArray(s1)
    bytK1 = HexToBinArray(key1)
    Call a.DES_Encode(byt1, StrConv(bytK1, vbUnicode), bytOut1)另外二进制数组的函数
    Private Function BinArrayToHex(Bin() As Byte) As String
            Dim iLoop     As Integer
            Dim sResult     As String
            sResult = "" '" "
            For iLoop = LBound(Bin) To UBound(Bin)
                    sResult = sResult + Right("0 " & Hex(Bin(iLoop)), 2) & "" ' "   "
            Next iLoop
            BinArrayToHex = Trim(sResult)
    End Function
    Private Function HexToBinArray(sHex As String) As Variant
            Dim iLoop     As Integer
            Dim bResult()     As Byte
            ReDim bResult(Len(sHex) \ 2)
            For iLoop = 0 To Len(sHex) \ 2
                    bResult(iLoop) = Val("&H " & Mid(sHex, iLoop * 2 + 1, 2))
            Next iLoop
            HexToBinArray = bResult
    End Function
      

  4.   

    zzhgb楼主,用你讲的方法试了一下,得到的结果是48577954 1A8CE941D8EAA35387ACEE7,还是没有得到正确的结果C9EF4CF9C5FD3CCB,不知道是哪出了问题
      

  5.   

    C9EF4CF9C5FD3CCB这一看就不是des加密的结果
      

  6.   

    zzhgb楼主,这是DES加密出来的结果,这个结果是开发做好的工具产生的结果,已经用了很多年了,而我现在是要把原来手动的测试改为自动的测试,所以我也要写一个DES算法,我从网上找的DES算法怎么都得不到这个结果
      

  7.   

    zzhgb楼主,我有开发做好的DES加密的原码,不过是VC的,我不懂VC,所以目前还没有搞明白VC里的DES和我在网上找的这个DES有什么差别
      

  8.   

    试试,输入用十六进制字符串:把这一句
    DESEntry = StrConv(InData, vbUnicode)换成
    For i = 0 To Len(InData) \ 2 - 1
    DESEntry(i) = Val("&H" &Mid(InData, i * 2 + 1, 2))
    Next iDES_Encode DESEntry, KeyL, DESResult
    DES_Decode DESResult, KeyR, DESEntry
    DES_Encode DESEntry, KeyL, DESResultstrCrypto = ""
    For i = 0 To 7
    strCrypto = strCrypto & Right("0" & Hex(DESResult(i))
    Next iDebug.Print strCrypto
      

  9.   

    楼上说的对,如果 Key 输入的也是十六进制字符串:Dim KeyL(7) As Byte
    Dim KeyR(7) As ByteFor i = 0 To 7
    KeyL(i) = Val("&H" &Mid(InData, i * 2 + 1, 2))
    KeyR(i) = Val("&H" &Mid(InData, i * 2 + 17, 2)) 
    Next i
      

  10.   

    of123楼主,key和indata数据我都转换过了,请看zzhgb楼主给出的意见。但是还是得不到那个正确的结果,不知道是哪出了问题
      

  11.   

    把你的vc源码发出来看看,其实有现成的
    http://sourceforge.net/projects/cryptopp/
      

  12.   


    你首先在网上的在线 DES 加密网站上测试你的输入、输入,确定加密是 ASCII 文本还是 16 进制码。然后,用单 DES 方式测试的下载的代码是否运算正确。也可以用你的代码测试单 DES 能够正确解密你的代码算出的密文到明文。依我的想象,至少第二和第三轮运算的输入必须是 16 进制码。对于解密,三轮必须都是 16 进制码。因为只要经过一轮运算,输出就必然不能用 ASCII 码覆盖。
      

  13.   

    我现在就是单DES得到的结果就不正确呀,更不要说是3DES了.我的VC码DES就是计算的正确结果,但是我用VB就是得不到这个结果,我也不知道是哪错了,因为VB版的DES算法是我在网上找的
      

  14.   

    找找CBC方式的DES,代码发你邮箱了
      

  15.   

    不高兴调dll的话;
    楼上那位是高手,叫他帮找一份vb代码给你;