zoukankan      html  css  js  c++  java
  • Delphi2010中字符串汇编需要注意的一点,以及支持2010的AES加密库

    昨天研究了一下Delphi2010的Unicode,同时也改了几个单元到2010中来,今天下午修改AES的加密库的时候,碰到一个问题,我将AES中的StrtoHex换成了自己写的汇编函数!其他的地方,都修改好了,但是加密之后总是没有结果返回!奇怪了半天,然后我将修改后的AES放到2007下去运行是一点问题都没有!最后调试了半天,将断点定在了StrToHex这个函数内部,调试运行也没发现问题,但是这个函数就是没结果返回。还真是奇怪了,于是翻开了它自己带的AnsiStrings单元查看里面相关的函数,晕,恍然大悟,原来在AnsiString的管理时也多加了一个CodePage的设置。既然如此,那么函数需要做相应的修改了哈!主题代码如下:

    代码
    function StrToHex(Const str: Ansistring): Ansistring;
    asm
        push ebx
        push esi
        push edi
        test eax,eax
        jz   @@Exit
        mov  esi,edx       
    //保存edx值,用来产生新字符串的地址
        mov  edi,eax       
    //保存原字符串
        mov  edx,[eax
    -4]  //获得字符串长度
        test edx,edx      
    //检查长度
        je   @@Exit      
    {Length(S) = 0}
        mov  ecx,edx       
    //保存长度
        Push ecx
        add  edx,edx
        mov  eax,esi
        
    {$IFDEF VER210}
        movzx ecx, word ptr [edi
    -12{需要设置CodePage}
        
    {$ENDIF}
        call System.@LStrSetLength 
    //设置新串长度
        mov  eax,esi       
    //新字符串地址
        Call UniqueString  
    //产生一个唯一的新字符串,串位置在eax中
        Pop   ecx
      @@SetHex:
        
    xor  edx,edx       //清空edx
        mov  dl, [edi]     
    //Str字符串字符
        mov  ebx,edx       
    //保存当前的字符
        
    shr  edx,4         //右移4字节,得到高8位
        mov  dl,byte ptr[edx
    +@@HexChar] //转换成字符
        mov  [eax],dl      
    //将字符串输入到新建串中存放
        
    and  ebx,$0F       //获得低8位
        mov  dl,byte ptr[ebx
    +@@HexChar] //转换成字符
        inc  eax             
    //移动一个字节,存放低位
        mov  [eax],dl
        inc  edi
        inc  eax
        loop @@SetHex
      @@Exit:
        pop  edi
        pop  esi
        pop  ebx

        ret
      @@HexChar: db 
    '0123456789ABCDEF'
    end;

    LStrSetLength之前要同时传入CodePage设置,这样这个函数经过这样修改之后就可以正常返回信息了!

    同时附上修改的AES代码 AES代码下载

  • 相关阅读:
    tophat安装
    glimmer 3.02安装小记
    Augustus安装小记
    推荐几个手机网站在线预览测试工具
    软件分辨率兼容性测试
    谈谈软件兼容性测试
    网页兼容性测试(工具使用IETESTER、Firefox、360安全浏览器)
    12款很棒的浏览器兼容性测试工具推荐
    测试用例设计——如何提高测试覆盖率
    软件测试报告写作实战案例
  • 原文地址:https://www.cnblogs.com/DxSoft/p/1638329.html
Copyright © 2011-2022 走看看