易截截图软件、单文件、免安装、纯绿色、仅160KB

在Delphi中解密Magento加密的信用卡号

问题背景:
       公司希望使用Magento来进行接单,而后把订单导入到一个ERP系统中(订单处理引擎)。
问题:
       在使用WebService从Magento中获取Payment信息时,信用卡是被加密的(法律规定不允许在数据库中存储信用卡的明文信息)!
      仔细研究了一下Magento的加密方式(/magento/app/code/core/Mage/Core/Model/Encryption.php)发现Magento对于敏感信息的处理是先加密、再用base64进行编码。
(其实这个问题可以变通一下,用PHP写一个解密文件,以加密后的信用卡号做为参数,返回值为信用卡的明文。Delphi中可以用Msxml2.XMLHTTP直接发送参数,但总觉得别扭。不过这是一个保底方案)
BlowFish是PHP自身提供的算法模块(用mcrypt_list_algorithms()查看其所支持的的算法模块的命令)。
public function encrypt($data)
{
return base64_encode($this->_getCrypt()->encrypt((string)$data));
}
知道这些后,进而跟踪其使用的加密方式是BlowFish。那下面的工作就简单了。
需要分二步骤来完成解密工作:
一.找到Delphi版的BlowFish(之所以找Delphi版源码而不是直接找DLL,是怕有些细节点PHP的算法会与Delphi的算法有差异,修改方便,结果被猜中了。
     1.1 在PHP中,如果明文是16位的,加密后的密文也会是16位的。在Delphi中,如果明文是16位的,加密后密文将会变为24位。
     1.2 在PHP中,如果明文不够16位,会以chr(0)来填充,以便以8位为一个Block进行加密。则在Delphi中,如果明文不够16位,会以一个数字 来填充。
二.对信用卡信息进行Base64解码与BlowFish解密工作。
下面就是对信用卡信息的解密:
uses
BlowFish,EncdDecd ;//BlowFish的源码下载见页底
var
DecryptCCNum:TBlowfish;
outstring:string;
begin
DecryptCCNum:=TBlowfish.Create(nil);
try
with DecryptCCNum do
begin
DecryptCCNum.CipherMode:=ECB ;
DecryptCCNum.StringMode:=smNormal;
DecryptCCNum.InitialiseString('4dc73a5cfb22ab514751cded9ef2db4b'); //这个是Magento安装时提供的密钥,如果忘了可以在安装程序下面在路径app/etc/下的local.xml文件
DecryptCCNum.DecString(DecodeString('加密后的信用卡号') ,outstring);
end;
fina


相关文档:

delphi 编写的com 对象 用delphi 的调用实例

delphi 编写的com 对象 用delphi 的调用实例
COM 对象与 前一篇文章的 PHP调用的COM为同一个对象,故不例出COM.
procedure TForm1.Button4Click(Sender: TObject);
var
  myCounter, mReturn: variant;
begin
  myCounter := CreateOleObject('abc.myxml');
  mReturn := myCounter.xml;
 &nbs ......

delphi dll 静态调用和动态调用方法总结

dll 调用方法有 静态调用和动态调用两种方法
用到的dll为上篇文章所编写的dll.
总结如下:
Unit Unit1;
Interface
Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
Type
  TForm1 = Class(TForm)
    Button1: TButton; ......

delphi 注册 com 对象的方法

delphi 注册 com 对象的方法
procedure TForm1.Button3Click(Sender: TObject);
var
 Sd: TSecurityDescriptor;
 begin
   InitializeSecurityDescriptor(@Sd, SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(@Sd, true, Nil, false);
    RegSe ......

【转】delphi读写txt文件

http://meidi152.blog.163.com/blog/static/5423302009610103610744/
 
1. memo控件读取txt
memo1.Lines.LoadfromFile('E:\*\*.txt');
2.
Procedure NewTxt(FileName:String);
Var
F : Textfile;
Begin
if fileExists(FileName) then DeleteFile(FileName); {看文件是否存在,在就刪除}
AssignFile(F, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号