/// <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. Golang pprof heap profile is empty

    Q: When you use `go tool pprof` get heap data, profile is empty. A: The default sampling rate is 1 s ...

  2. 使用before、after伪类制作三角形

    使用before.after伪类实现三角形的制作,不需要再为三角形增加不必要的DOM元素,影响阅读. <!DOCTYPE html><html><head>    ...

  3. css3整理--clip

    clip语法: .selector { clip: rect | auto | inherit } 注意:clip属性只能在元素设置了“position:absolute”或者“position:fi ...

  4. php报错: PHP Warning: PHP Startup: memcache: Unable to initialize module

    在mac上通过brew 安装php的memcache扩展(brew install php56-memcache)后运行 ~  php -mPHP Warning:  PHP Startup: mem ...

  5. 如何重置CentOS 7的Root密码?设置CentOS 7的Root密码的方法与步骤

  6. 云极知客开放平台接口调用方法(C#)

    云极知客为企业提供基于SAAS的智能问答服务.支持企业个性化知识库的快速导入,借助语义模型的理解和分析,使企业客户立即就拥有本行业的24小时客服小专家.其SAAS模式实现零成本投入下的实时客服数据的可 ...

  7. 移动审批App开发总结

    公司新需求要在手机上进行审批. 现在开发完成了. 总结:1.初步把公司的工作流模块做成RPC服务,公共服务可以进行调用. 2.服务分层,每个App的页面对应一个服务端的接口,作为前端控制器,用来从更低 ...

  8. 快乐的JS正则表达式(开篇)

    我不喜欢一开始就去讨论某某有多强大,因为我觉得那样没意思,首先我们的知道它是干什么,对我们有啥用,再去讨论它的强大之处也不迟.那和往常一样我们先来看几个例子. var arr = [1,4,2,5,2 ...

  9. spring 配置多个数据源的文件

    <?xml version="1.0" encoding="UTF-8"?><!-- Repository and Service layer ...

  10. iOS-UIScrollView-图片缩放

    一. 实现功能 两个手指捏合,可以放大或者缩小图片. 二.原理说明 1. 实现缩放功能的四个步骤 (1) 让控制器遵守代理协议 (2) 让scrollView设置代理 self (3) 调用代理方法, ...