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

这里仅以Delphi为例,C#/Java类似

问题背景:

       公司希望使用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()查看其所支持的的算法模块的命令)。

 

 

知道这些后,进而跟踪其使用的加密方式是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解密工作。

下面就是对信用卡信息的解密:

注意:使用者需要自己修改一下DecString过程中的最后一行,该行会导致解密的结果少一位

 

BlowFish For PHP(Delphi)下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值