首页 新闻 会员 周边

求个 C# POS终端MAC的算法

0
悬赏园豆:50 [已解决问题] 解决于 2014-06-18 16:23

前几天已经将 单倍和双倍3des加密算法找到了,现在就差这个mac算法了,始终跟pos开发工具写的不一样,麻烦大神忙我看看找找方法,谢谢了:)

贴一个正确的

密钥:1234567812345678

数据:310000000449380802100006376227000730300022170D3808520923102000003030303135373137313035313130303730313130343835313536D11144BE1EA563B026000000000000000013010000290005004336394142444242

结果:4145444645383546

 

POS终端采用ECB的加密方式,简述如下:

a)  将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK (MAB)。

b)  对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”。

示例 :

MAB = M1 M2 M3 M4

其中:   

M1 = MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18

M2 = MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28

M3 = MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38

M4 = MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48

 

按如下规则进行异或运算:

               MS11 MS12 MS13 MS14 MS15 MS16 MS17 MS18

XOR)          MS21 MS22 MS23 MS24 MS25 MS26 MS27 MS28

---------------------------------------------------

TEMP BLOCK1 =  TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18

 

然后,进行下一步的运算:

TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18

XOR)          MS31 MS32 MS33 MS34 MS35 MS36 MS37 MS38

---------------------------------------------------

TEMP BLOCK2 =  TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28

 

再进行下一步的运算:

TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28

XOR)          MS41 MS42 MS43 MS44 MS45 MS46 MS47 MS48

---------------------------------------------------

RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38

    

c)  将异或运算后的最后8个字节(RESULT BLOCK)转换成16 个HEXDECIMAL:

RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38

             = TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342 ||

               TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382

 

d)  取前8 个字节用MAK加密:

ENC BLOCK1 = eMAK(TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342)

            = EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18

 

e)  将加密后的结果与后8 个字节异或:

EN11  EN12  EN13  EN14  EN15  EN16  EN17  EN18

XOR)       TM351 TM352 TM361 TM362 TM371 TM372 TM381 TM382

------------------------------------------------------------

TEMP BLOCK= TE11  TE12  TE13  TE14  TE15  TE16  TE17  TE18

 

f)  用异或的结果TEMP BLOCK 再进行一次单倍长密钥算法运算。

ENC BLOCK2 = eMAK(TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18)

           = EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28

 

g)  将运算后的结果(ENC BLOCK2)转换成16 个HEXDECIMAL:

ENC BLOCK2 = EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28

= EM211 EM212 EM221 EM222 EM231 EM232 EM241 EM242 ||

             EM251 EM252 EM261 EM262 EM271 EM272 EM281 EM282

示例 :

ENC RESULT= %H84, %H56, %HB1, %HCD, %H5A, %H3F, %H84, %H84

转换成16 个HEXDECIMAL:

“8456B1CD5A3F8484”

h)  取前8个字节作为MAC值。

取”8456B1CD”为MAC值。

问题补充:

还有大神帮我看看吗?异域之后,得出的结果跟工具的不一样,跪求答案或者过程

学点东西:)的主页 学点东西:) | 初学一级 | 园豆:6
提问于:2014-06-17 15:59
< >
分享
最佳答案
0

用 HMACMD5.

收获园豆:50
Launcher | 高人七级 |园豆:45045 | 2014-06-17 16:17

嗯,不应该是这个吧,应该是异域和单倍3des的事情

学点东西:) | 园豆:6 (初学一级) | 2014-06-17 16:21

@学点东西:): 那用这个 MACTripleDES。

Launcher | 园豆:45045 (高人七级) | 2014-06-17 16:32

@Launcher: 不好意思,我单倍3des加密我找到方法了,就是在异域,加密那里出现问题了,不好意思我可能没说清楚

学点东西:) | 园豆:6 (初学一级) | 2014-06-17 16:38

@学点东西:): 那你直接把他描述的算法用 C# 代码实现不就行了。

Launcher | 园豆:45045 (高人七级) | 2014-06-17 16:41

@Launcher: 跟工具算出不一样,呜呜

学点东西:) | 园豆:6 (初学一级) | 2014-06-17 16:43

@学点东西:):那么你只能让银联把文档翻译成人话,类似如下:

http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.mactripledes(v=vs.110).aspx

也就是别人一看就知道是用来什么算法,算法的参数设置是多少等等。

否则,你就只能按照银联的文档描述自己写算法了。

Launcher | 园豆:45045 (高人七级) | 2014-06-17 16:47

@Launcher: 嗯,我在看看吧,谢谢,我在等等别人的答案,稍后给分

学点东西:) | 园豆:6 (初学一级) | 2014-06-17 16:49

@学点东西:): 不用等了:http://q.cnblogs.com/q/62790/

另外你也搜下园子里关于加解密的提问,基本都只有我回答。

Launcher | 园豆:45045 (高人七级) | 2014-06-17 16:56

@学点东西:): 另外我觉得 MACTripleDES 很靠谱,Padding 设置为 Zeros 的话同“如果最后不满8个字节,则添加“0X00”” 是匹配的,只是因为 ECB 模式存在安全隐患,被抛弃了,默认使用 CBC 模式。但是通过反射的话,可以得到 MACTripleDES 的 TripleDES 字段,然后修改其 Mode 为 ECB 就行。或者自己直接从 KeyedHashAlgorithm 派生,也不难。

Launcher | 园豆:45045 (高人七级) | 2014-06-17 17:08

@Launcher: 还真只有你回答了,呜呜,上次那个帖子也是你回复的

学点东西:) | 园豆:6 (初学一级) | 2014-06-18 15:34

@学点东西:): 谢谢:)

学点东西:) | 园豆:6 (初学一级) | 2014-06-18 16:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册