/// <summary>
/// 获取MAC校验字节数据
/// </summary>
/// <param name="bankData">报文字节</param>
/// <returns>MAC校验字节数据</returns>
internal static byte[] GetMacData(byte[] bankData)
{
var lstMacKey = new List<byte>(_macKey);
var leftKey = lstMacKey.GetRange(, ).ToArray();
var rightKey = lstMacKey.GetRange(, ).ToArray();
var lstPlaintext = new List<byte>(bankData);
while (lstPlaintext.Count % != )
lstPlaintext.Add();
long intMacData = ;
for (var i = ; i < lstPlaintext.Count / ; i++)
{
if (i == )
intMacData = BitConverter.ToInt64(lstPlaintext.GetRange(i * , ).ToArray(), );
else
intMacData = intMacData ^ BitConverter.ToInt64(lstPlaintext.GetRange(i * , ).ToArray(), );
intMacData = BitConverter.ToInt64(Encrypt(BitConverter.GetBytes(intMacData), GetKey(leftKey)), );
}
var bysRet = Decrypt(BitConverter.GetBytes(intMacData), GetKey(rightKey));
bysRet = Encrypt(bysRet, GetKey(leftKey));
return Encoding.ASCII.GetBytes(BytesToHex(bysRet).ToUpper().Substring(,));
}

ANSI X9.19 MAC算法

(1)      ANSI X9.19MAC算法只使用双倍长密钥。

(2)      MAC数据先按8字节分组,表示为D0~Dn,如果Dn不足8字节时,尾部以字节00补齐。

(3)      用MAC密钥左半部加密D0,加密结果与D1异或作为下一次的输入。

(4)      将上一步的加密结果与下一分组异或,然后用MAC密钥左半部加密。

(5)      直至所有分组结束。

(6)      用MAC密钥右半部解密(5)的结果。

(7)      用MAC密钥左半部加密(6)的结果。

(8)      取(7)的结果的左半部作为MAC。

帮助到您了吗?

打赏作者(支付宝):

ANSI X9.19 MAC算法的更多相关文章

  1. ANSI-X99MAC算法和PBOC的3DES MAC算法

    仅仅要有标准的DES加密和解密算法.类似ANSI-X99MAC算法和PBOC3DES算法就非常好实现.他们都是用DES算法再经过一层算法实现的.实现原理看图就能看明确.3DES算法实现就更简单了.就是 ...

  2. DES算法和MAC算法总结

    需要用到的工具类,代码如下: import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java. ...

  3. ANSI X9.8标准 PIN xor PAN获取PIN BlOCK

    ANSI X9.8标准 PIN xor PAN获取PIN BlOCK 之前看到几篇介绍,把ANSI说成16个字节,真心扯淡,各种误人子弟,真正的ANSI算法其实是8个字节,具体格式如下: (1) AN ...

  4. Java实现3DES加密--及ANSI X9.8 Format标准 PIN PAN获取PIN BlOCK

    1, 采用银联ANSI X9.8标准 PIN xor PAN获取PIN BlOCK 2, 采用3Des进行加密 参考: des和3Des加密算法实现 要点:因为3DES是对称加密算法,key是24位, ...

  5. 消息摘要算法-MAC算法系列

    一.简述 mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也经常被称作HMA ...

  6. MAC算法

    MAC算法 (Message Authentication Codes) 带秘密密钥的Hash函数:消息的散列值由只有通信双方知道的秘密密钥K来控制.此时Hash值称作MAC. 原理:在md与sha系 ...

  7. Crossover 19(Mac运行Windows应用程序)

    怎样才能在Mac上运行Windows应用程序?相信这是很多朋友都在问的问题,今天macdown(mac软件平台)小编为大家带来Crossover 19 Mac版下载,Crossover 19 mac版 ...

  8. 数据结构和算法(Golang实现)(19)排序算法-冒泡排序

    冒泡排序 冒泡排序是大多数人学的第一种排序算法,在面试中,也是问的最多的一种,有时候还要求手写排序代码,因为比较简单. 冒泡排序属于交换类的排序算法. 一.算法介绍 现在有一堆乱序的数,比如:5 9 ...

  9. OpenCV学习(19) 细化算法(7)

    最后再来看一种通过形态学腐蚀和开操作得到骨架的方法.http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/ 代码非常简单: v ...

随机推荐

  1. postgresql 获取刚刚插入的数据主键id

    postgresql不支持last_insert_id()方法,恶心到啦: 不过还好它有其他的解决方案: 创建一个测试数据表: CREATE TABLE test.test18 ( id serial ...

  2. Reveal-Plugin-for-Xcode 自动结合 Reveal 进行 UI 分析

    下载地址:https://github.com/shjborage/Reveal-Plugin-for-Xcode 还记得之前我们如何使用 Reveal UI 分析工具进行实时查看 UI 的结构吗?如 ...

  3. 实战:ajax带参数请求slim API

    restful api 支持get,post,put,delete等方法,那么jquery客户端怎么去实现呢?涉及到跨域又怎么办? 很多时候需要传递一个token(api_key) 去识别用户身份,获 ...

  4. 编译升级php之路(5.5.7 到 5.5.37)

    为在一台旧服务器上能使用slim,共经历了: 1.安装composer(需要高版本php,原来是5.5.7) 2.升级php版本到5.5.37(编译出错,准备使用docker) 3.升级centos内 ...

  5. myeclipse 2013 SR2 for(MAC/WINDOWS)破解 注册过程

    前天去官网下载的时候都还只是sr1,结果昨天去看居然有sr2了,之前一直在windows下用 2013,网上的注册机都还很好用.但最近换了mac,下载的sr1我却无论如何都没办法破解,下载了N个版本的 ...

  6. LiveWriter Test

    From LiveWriter.

  7. easyui datagrid to excel

    $.extend($.fn.datagrid.methods, { toExcel: function(jq, filename){ return jq.each(function(){ var ur ...

  8. VMware下OS X Yosemite安装VMsvga2桌面黑屏解决方法

    VMsvga2目前并不支持Yosemite,如果安装的话进入桌面除了顶部菜单,全部黑屏.通过顶部菜单打开的大部分应用都会立刻奔溃关闭.参考以下步骤可以解决问题: 1.下载VMsvga2的uninsta ...

  9. Metatable和Metamethod

    Metatable和Metamethod是用来干啥的?它们可以使得表a和b的表达式“a + b”变得有意义,其中metatable使两个不相关的表a和b之间可以进行操作,而操作的具体行为比如说&quo ...

  10. SharePoint 2013 搜索爬网功能

    最近在政府部门介绍SharePoint 2013 新功能,我也准备了很多,比如SharePoint 2013的Search.以后有机会谈谈Office Web App,Workflow等. Share ...