刷卡机交易安全校验码 keyEncKeY怎么解决

常用软件推荐
原创软件推荐
ENC文件解密工具(EA-Key)用于解密ENC文件,输入密码后可以通过这个软件进行解密。由于EA-KEY3.1采用的是AES256位加密算法对文件进行加密,当需要加密的文件比较大时,加密时间可能会长一些。
高速下载器地址
适合机型:三星G9250,三星G9250刷机包
Android版本:6.0.1
ROM大小:1440.00 MB
本站提供的软件会测试再上传,但无法保证所有软件都没有问题,如果您发现链接错误或其它问题,请在评论里告诉我们!
下载点支持点击下载(IE图标)或(迅雷图标),若直接点击下载速度太慢,请尝试点击其他的下载点,若文件太大请使用高速下载器。为确保下载的文件能正常使用,请使用最新版本解压本站软件。
建议大家谨慎对待所下载的文件,大家在***的时候务必留意每一步!关于或的有关提示,请自行注意选择操作。
本站所有资源均是软件作者、开发商投稿、网上搜集,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!将不对任何资源负法律责任。所有资源请在下载后24小时内删除。
网友评论评论内容摘要(共 0 条,) 得分 0 分这两天做银联的接口,遇到了银联的MAC验证算法。
上网查询了一下,银联的MAC算法原文是如下: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&MS18M2&=&MS21&MS22&MS23&MS24&MS25&MS26&MS27&MS28M3&=&MS31&MS32&MS33&MS34&MS35&MS36&MS37&MS38M4&=&MS41&MS42&MS43&MS44&MS45&MS46&MS47&MS48按如下规则进行异或运算:&
MS11&MS12&MS13&MS14&MS15&MS16&MS17&MS18XOR)
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&TM18XOR)
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&TM28XOR)
MS41&MS42&MS43&MS44&MS45&MS46&MS47&MS48---------------------------------------------------RESULT&BLOCK&= TM31&TM32&TM33&TM34&TM35&TM36&TM37&TM38c)&&将异或运算后的最后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&TM382d)&&取前8&个字节用MAK加密:ENC&BLOCK1&=&eMAK(TM311&TM312&TM321&TM322&TM331&TM332&TM341&TM342)=&EN11&EN12&EN13&EN14&EN15&EN16&EN17&EN18e)&&将加密后的结果与后8&个字节异或:EN11&&EN12&&EN13&&EN14&&EN15&&EN16&&EN17&&EN18XOR)&&&&& TM351&TM352&TM361&TM362&TM371&TM372&TM381&TM382------------------------------------------------------------TEMP&BLOCK= TE11&&TE12&&TE13&&TE14&&TE15&&TE16&&TE17&&TE18f)&&用异或的结果TEMP&BLOCK&再进行一次单倍长密钥算法运算。ENC&BLOCK2&=&eMAK(TE11&TE12&TE13&TE14&TE15&TE16&TE17&TE18)&&&=&EN21&EN22&EN23&EN24&EN25&EN26&EN27&EN28g)&&将运算后的结果(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:&A3F8484&h)&&取前8个字节作为MAC值。取&8456B1CD&为MAC值。
我用大白话举个例子:
经过一番 查找资料。完成如下:
这个是DES加密类:
public class MACDes
/// &summary&
/// 将字符串转换成16进制的字符
/// &/summary&
/// ¶m name="hex"&&/param&
/// &returns&&/returns&
public static byte[] HexConvert(string hex)
byte[] result = null;
hex = hex.ToUpper();
int len = (hex.Length / 2);
result = new byte[len];
char[] achar = hex.ToCharArray();
for (int i = 0; i & i++)
int pos = i * 2;
string by = new string(new char[] { achar[pos], achar[pos + 1] });
result[i] = Convert.ToByte(by, 16);
catch (Exception ex)
/// &summary&
/// &/summary&
/// ¶m name="decrypt"&&/param&
/// ¶m name="key"&&/param&
/// &returns&&/returns&
private static byte[] Triple3DES2Decrypt(byte[] decrypt, byte[] key)
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
//指定密匙长度,单倍、双倍、三倍分别是 64, 128, 192 默认为192位
des.KeySize = 128;
//使用指定的key和IV(加密向量)
des.IV = IV;
//加密模式,偏移
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.N
//进行加密转换运算
ICryptoTransform ct = des.CreateDecryptor();
//8很关键,加密结果是8字节数组
return ct.TransformFinalBlock(decrypt, 0, 8);
catch (Exception ex)
return null;
/// &summary&
/// &/summary&
private static byte[] IV = { 0xB0, 0xA2, 0xB8, 0xA3, 0xDA, 0xCC, 0xDA, 0xCC };
public static byte[] sig1 = new byte[1024];
/// &summary&
/// &/summary&
/// ¶m name="encrypt"&&/param&
/// ¶m name="key"&&/param&
/// &returns&&/returns&
public static string Triple3DESEncrypt(byte[] encrypt, byte[] key1)
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
//以下两个很重要 ,解决了其它语言结果不一样的问题
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.Z
//建立加密对象的密钥和偏移量
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
//使得输入密码必须输入英文文本
des.Key = key1;
des.IV = IV;
using ( MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
cs.Write(encrypt, 0, encrypt.Length);
cs.FlushFinalBlock();
byte[] buff = ms.ToArray();
string sdfsdl = BitConverter.ToString(buff).Replace("-","");
//string str = "";
//str=string.Join("", buff.Select(d =& Convert.ToString(d, 16).PadLeft(2, '0')).ToArray());
#region MAC检验
/// &summary&
/// MAC检验
/// DES加密
/// 将字符串变成MAC值
/// a) 带长度值的字段在计算MAC时应包含其长度值信息;
/// b) 在字段和字段之间插入一个空格;
/// c) 所有的小写字母转换成大写字母;
/// d) 除了字母(A-Z),数字(0-9),空格,逗号(,)和点号(.)以外的字符都删去;
/// e) 删去所有字段的起始空格和结尾空格;
/// f) 多于一个的连续空格,由一个空格代替。
/// &/summary&
/// ¶m name="str"&&/param&
/// &returns&&/returns&
public string StringDoWithFilter(string str)
str = str.ToUpper();
string strabc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,.";
for (int i = 0; i & str.L i++)
char j = str[i];
if (!strabc.Contains(j))
str = str.Replace(j, ' ');
//换成MAB串码
string EncryptPWD = MD5Convert.EncryptPWD(str.Replace(" ", ""));
//将多个空格替换成一个空格
//string str = "A B
//str = new System.Text.RegularExpressions.Regex("[\\s]+").Replace(str, " ");
string str1 = EncryptPWD.Substring(0, 16);
string str2 = EncryptPWD.Substring(16, 16);
long num1 = Int64.Parse(str1, System.Globalization.NumberStyles.HexNumber);
long num2 = Int64.Parse(str2, System.Globalization.NumberStyles.HexNumber);
long num3 = num1 ^ num2;
string FinallyHEXString = Convert.ToString(num3, 16);
byte[] b = MACDes.HexConvert(FinallyHEXString);
//这是密钥
byte[] a = MACDes.HexConvert(Secret_key);
string result = MACDes.Triple3DESEncrypt(b, a);
Console.WriteLine(result);
#endregion
阅读(...) 评论() &114网址导航

参考资料

 

随机推荐