java ansi x9.9 mac_ANSI X9.19 MAC算法

本文详细介绍了如何在Java中实现ANSI X9.9 MAC(Message Authentication Code)算法,包括MAC数据的分组处理、密钥的使用以及加密解密过程。该算法基于DES加密,用于确保数据的完整性和安全性。
摘要由CSDN通过智能技术生成

///

/// 获取MAC校验字节数据

///

/// 报文字节

/// MAC校验字节数据

internal static byte[] GetMacData(byte[] bankData)

{

var lstMacKey = new List(_macKey);

var leftKey = lstMacKey.GetRange(, ).ToArray();

var rightKey = lstMacKey.GetRange(, ).ToArray();

var lstPlaintext = new List(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-X99MAC算法和PBOC的3DES MAC算法

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

DES算法和MAC算法总结

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

ANSI X9&period;8标准 PIN xor PAN获取PIN BlOCK

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

Java实现3DES加密--及ANSI X9&period;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&lpar;Mac运行Windows应用程序&rpar;

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

数据结构和算法&lpar;Golang实现&rpar;&lpar;19&rpar;排序算法-冒泡排序

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

OpenCV学习&lpar;19&rpar; 细化算法&lpar;7&rpar;

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

随机推荐

label下面放置select的问题

今天做项目的时候突然发现一个问题. html标签label的用法分两种: 姓名:

AngularJS中实现日志服务

本篇体验使用AngularJS自定义一个记录日志的服务. 在AngularJS中,服务的一些写法是这样的: var app = angular.module('app',[]); app.provid ...

php-- Linux图形界面与字符界面切换

转自:http://blog.163.com/wang_ly2442/blog/static/9494340720128355054551/ 1. 启动时进入字符界面,后来想切换到图形界面:使用sta ...

php基础知识【函数】(9)数学和对象类函数

一.数学  abs -- 绝对值 ceil -- 进一法取整 floor -- 舍去法取整 fmod -- 返回除法的浮点数余数 round -- 对浮点数进行四舍五入 sqrt -- 平方根 pi( ...

BZOJ3724PA2014Final Krolestwo——欧拉回路&plus;构造

题目描述 你有一个无向连通图,边的总数为偶数.设图中有k个奇点(度数为奇数的点),你需要把它们配成k/2个点对(显然k被2整除).对于每个点对(u,v),你需要用一条长度为偶数(假设每条边长度为1)的 ...

关于Kafka producer管理TCP连接的讨论

在Kafka中,TCP连接的管理交由底层的Selector类(org.apache.kafka.common.network)来维护.Selector类定义了很多数据结构,其中最核心的当属java.n ...

Session配置之WebApi支持

1.在WebApiConfig中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它 public class SessionRouteH ...

THE First Individual Project - Word frequency program

第一次写博客,这次也是本学期写到第一个程序. 老师要求网址:http://www.cnblogs.com/jiel/p/3311400.html#2777556 一.项目预计时间 一开始想使用不熟悉的 ...

python 基础数据类型之list

python 基础数据类型之list: 1.列表的创建 list1 = ['hello', 'world', 1997, 2000] list2 = [1, 2, 3, 4, 5 ] list3 = ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值