在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
相关文档:
TreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。
一、针对TTreeNodes,也就是 TreeView.Items,有这些属性:
1、count,节点个数。
2、item[index] ,通过index得到节点。
二、针对TTreeNodes,也就是 TreeView.Items,常用的添加节点的操作 ......
研究了一下Pop3的邮件接收协议,然后随手写了一个Pop3的邮件接收控件!Pop3的邮件协议实际上是很简单的,知道那几个命令就行了,与服务器之间
的交互是一问一答得方式,控制起来也容易,相对而言邮件格式的解析倒是更加麻烦一点!于是也便顺带着将MIME邮件格式给熟悉了一下!总归说来,规律性比
较强,先获取最大的顶层框 ......
type
TCharStack = class(TStack)
private
function GetTop: Char;
public
function Pop: Char;
function Push(Item: Char): Char;
property Top: Char read GetTop;
end;
const
FindSet = ['(',')'];
implementation
{$R *.dfm}
{ TCharStack }
......
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, ......
Delphi in a Unicode World Part II: New RTL Features and
Classes to Support Unicode
By: Nick
Hodges
原文链接:http://dn.codegear.com/article/38498
Abstract: This article will cover the new features of the Tiburon
Runtime Library that will help handle Unicode strings.
//
& ......