Delphi2010中字符串汇编需要注意的一点,以及支持2010的AES加密库

简介:

昨天研究了一下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代码 AES代码下载



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

相关文章
|
15天前
|
Linux 数据安全/隐私保护 Windows
aes加密在linux下会生成随机key的解决办法
aes加密在linux下会生成随机key的解决办法
11 2
|
26天前
|
数据安全/隐私保护
使用加密工具类进行有效的字符串加密——CSDN博客
使用加密工具类进行有效的字符串加密——CSDN博客
14 0
|
26天前
|
数据安全/隐私保护
常用的字符串加密解密工具类
常用的字符串加密解密工具类
12 0
|
29天前
|
PHP 数据安全/隐私保护
在PHP中使用AES进行加密和解密
在PHP中使用AES进行加密和解密
|
2月前
|
存储 算法 安全
【加密算法】AES对称加密算法简介
【加密算法】AES对称加密算法简介
|
2月前
|
Java API Maven
敏感数据的保护伞——SpringBoot Jasypt加密库的使用
我们经常会在yml配置文件中存放一些敏感数据,比如数据库的用户名、密码,第三方应用的秘钥等等。这些信息直接以明文形式展示在文件中,无疑是存在较大的安全隐患的,所以今天这篇文章,我会借助jasypt实现yml文件中敏感信息的加密处理。
163 1
敏感数据的保护伞——SpringBoot Jasypt加密库的使用
|
2月前
|
安全 小程序 数据安全/隐私保护
aes加密算法python版本
aes加密算法python版本
36 0
|
3月前
|
算法 安全 物联网
全面了解AES加密:入门指南(二)
全面了解AES加密:入门指南
|
2月前
|
Java 数据安全/隐私保护
6-4 字符串加密(Java解法,两种网上的类型题)
6-4 字符串加密(Java解法,两种网上的类型题)
21 0
|
3月前
|
存储 安全 算法
全面了解AES加密:入门指南(一)
全面了解AES加密:入门指南