博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi2010中字符串汇编需要注意的一点,以及支持2010的AES加密库
阅读量:7236 次
发布时间:2019-06-29

本文共 1358 字,大约阅读时间需要 4 分钟。

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

ExpandedBlockStart.gif
代码
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代码 

本文转自 不得闲 博客园博客,原文链接: http://www.cnblogs.com/DxSoft/archive/2010/01/03/1638329.html  ,如需转载请自行联系原作者

你可能感兴趣的文章
[转载红鱼儿]kbmmw 开发点滴:kbmMW客户端提交事务的现场处理
查看>>
PHP中把一个文件夹下的一个文件移动到另一个文件夹
查看>>
关于点击空白关闭弹窗的js写法推荐
查看>>
PAT1009
查看>>
根据抓的包用代码模拟登录
查看>>
html中的src与href的区别
查看>>
Base64编码
查看>>
Installing Chocolatey
查看>>
python3+spark2.1+kafka0.8+sparkStreaming
查看>>
jstl自己定义函数的使用
查看>>
使用Visual Studio Code调试React Native报错
查看>>
FineUI 将不再内置 ExtJS (严格遵守 ExtJS 的开源规则)
查看>>
javascript 中contentWindow和 frames和iframe之间通信
查看>>
取得正在运行的Activity
查看>>
UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
查看>>
二分-hdu-4768-Flyer
查看>>
IE下target获得焦点时存在虚线的问题
查看>>
Web App开发入门
查看>>
PHP实现金额数字转换成大写函数
查看>>
IE读取并显示本地图像文件的方法
查看>>