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代码下载

  • 相关阅读:
    Python——五分钟带你弄懂迭代器与生成器,夯实代码能力
    LeetCode37 使用回溯算法实现解数独,详解剪枝优化
    LeetCode 33,在不满足二分的数组内使用二分的方法
    丰富图文详解B-树原理,从此面试再也不慌
    看完这篇让你高数不挂科之——泰勒公式
    数据结构——动手实战双向链表
    你听说过JMX么
    【网络安全】CSRF攻击详解
    【开发工具】本机安装的JDK8,启动IDEA2019没反应
    Java开发过程中的常用工具类库
  • 原文地址:https://www.cnblogs.com/DxSoft/p/1638329.html
Copyright © 2011-2022 走看看