ANSI X9.19 MAC算法
/// <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算法的更多相关文章
- ANSI-X99MAC算法和PBOC的3DES MAC算法
仅仅要有标准的DES加密和解密算法.类似ANSI-X99MAC算法和PBOC3DES算法就非常好实现.他们都是用DES算法再经过一层算法实现的.实现原理看图就能看明确.3DES算法实现就更简单了.就是 ...
- DES算法和MAC算法总结
需要用到的工具类,代码如下: import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java. ...
- ANSI X9.8标准 PIN xor PAN获取PIN BlOCK
ANSI X9.8标准 PIN xor PAN获取PIN BlOCK 之前看到几篇介绍,把ANSI说成16个字节,真心扯淡,各种误人子弟,真正的ANSI算法其实是8个字节,具体格式如下: (1) AN ...
- 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位, ...
- 消息摘要算法-MAC算法系列
一.简述 mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也经常被称作HMA ...
- MAC算法
MAC算法 (Message Authentication Codes) 带秘密密钥的Hash函数:消息的散列值由只有通信双方知道的秘密密钥K来控制.此时Hash值称作MAC. 原理:在md与sha系 ...
- Crossover 19(Mac运行Windows应用程序)
怎样才能在Mac上运行Windows应用程序?相信这是很多朋友都在问的问题,今天macdown(mac软件平台)小编为大家带来Crossover 19 Mac版下载,Crossover 19 mac版 ...
- 数据结构和算法(Golang实现)(19)排序算法-冒泡排序
冒泡排序 冒泡排序是大多数人学的第一种排序算法,在面试中,也是问的最多的一种,有时候还要求手写排序代码,因为比较简单. 冒泡排序属于交换类的排序算法. 一.算法介绍 现在有一堆乱序的数,比如:5 9 ...
- OpenCV学习(19) 细化算法(7)
最后再来看一种通过形态学腐蚀和开操作得到骨架的方法.http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/ 代码非常简单: v ...
随机推荐
- IOS开发 图形绘制,绘制线条,矩形,和垂直和居中绘制文字
概述 吐槽下IOS下 的图形绘图,代码冗长,不得不自己重新封装方法.整理形成本文. 绘制线 // 绘制直线 + (void)toDrawLineFromX:(CGFloat)x1 Y:(CGFloat ...
- mac 自动配置java版本
首先输入命令:vi .bash_profile ,添加如下内容: # Mac默认 JDK (Mac默认自带了一个jdk6版本) export JAVA_6_HOME=`/usr/libexec/jav ...
- Python--类-例子
class Base: def __init__(self): self.data = [] def add(self, x): self.data.append(x) def addtwice(se ...
- POJ 2082 Terrible Sets
Terrible Sets Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 2747 Accepted: 1389 Des ...
- Android Launcher 研究学习
Launcher是系统启动后第一个启动的程序,是其它应用程序的入口,也就是我们的手机程序的桌面程序; 一.Launcher的定义及构成: <1>通过查看官方提供的Launcher源码可以知 ...
- 消息中间件Notify和MetaQ-阿里中间件
3.1.Notify Notify是淘宝自主研发的一套消息服务引擎,是支撑双11最为核心的系统之一,在淘宝和支付宝的核心交易场景中都有大量使用.消息系统的核心作用就是三点:解耦,异步和并行.下面让我以 ...
- Linux发行版大全
基于Debian Adamantix:基于Debian,特别关注安全. Amber Linux:基于Debian,针对拉脱维亚用户作了一些定制. ASLinux Desktop:西班牙语,基于D ...
- [LeetCode] Wildcard Matching 字符串匹配,kmp,回溯,dp
Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...
- JavaScript备忘录(2)——闭包
语句 JavaScript是解释型语言,解释器是按照顺序逐句执行的(除了进行一些少量预处理,如将函数声明提前). 顺序是由流程控制语句来控制的,常用的流程控制语句包括: 条件控制语句:if...els ...
- WCF 遇到的问题
1.只有项目的net版本2.0以上的才可以引用到wcf的类库 2.HTTP 错误 404.17 - Not Found 映射问题 WCF服务建立好,提示这个错误,缺少映射问题,要将应用程序池和项 ...