`
virusfu
  • 浏览: 182083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

报文MAC算法java实现

 
阅读更多
/**
 * 
 */
package net.etongbao.common.utils;

import java.util.Arrays;

/**
 * Mac工具类,采用ECB算法
 * 
 * @author Fu Wei
 * 
 */
public class MacEcbUtils {
	public static byte[] IV = new byte[8];

	public static byte byteXOR(byte src, byte src1) {
		return (byte) ((src & 0xFF) ^ (src1 & 0xFF));
	}

	public static byte[] bytesXOR(byte[] src, byte[] src1) {
		int length = src.length;
		if (length != src1.length) {
			return null;
		}
		byte[] result = new byte[length];
		for (int i = 0; i < length; i++) {
			result[i] = byteXOR(src[i], src1[i]);
		}
		return result;
	}

	/**
	 * mac计算,数据不为8的倍数,需要补0,将数据8个字节进行异或,再将异或的结果与下一个8个字节异或,一直到最后,将异或后的数据进行DES计算
	 * 
	 * @param key
	 * @param Input
	 * @return
	 */
	public static byte[] clacMac(byte[] key, byte[] Input) {
		int length = Input.length;
		int x = length % 8;
		int addLen = 0;
		if (x != 0) {
			addLen = 8 - length % 8;
		}
		int pos = 0;
		byte[] data = new byte[length + addLen];
		System.arraycopy(Input, 0, data, 0, length);
		byte[] oper1 = new byte[8];
		System.arraycopy(data, pos, oper1, 0, 8);
		pos += 8;
		for (int i = 1; i < data.length / 8; i++) {
			byte[] oper2 = new byte[8];
			System.arraycopy(data, pos, oper2, 0, 8);
			byte[] t = bytesXOR(oper1, oper2);
			oper1 = t;
			pos += 8;
		}
		byte[] buff = DesUtils.encrypt(oper1, key);
		// 取8个长度字节
		byte[] retBuf = new byte[8];
		System.arraycopy(buff, 0, retBuf, 0, 8);
		return retBuf;
	}

	public static void main(String[] args) {
		byte[] buff = { 2, 1, 32, 32, 0, 0, 0, -64, -128, 25, 0, 0, 0, 0, 0, 86, 48, 49, 48, 52, 55, 51, 50, 53, 49,
		        48, 52, 49, 49, 48, 49, 53, 52, 49, 49, 52, 54, 54, 48, 67, 78, 89, 0, 6, 48, 49, 49, 48, 48, 48, 0,
		        68, 48, 48, 48, 48, 48, 49, 48, 56, 48, 48, 48, 49, 103, 80, 102, 53, 90, 72, 119, 67, 101, 105, 52,
		        61, 67, 90, 83, 83, 48, 48, 49, 53, 17, 49, 51, 49, 51, 49, 51, 49, 51, 49, 51, 49 };
		System.out.println(Arrays.toString(clacMac("b69e6b76".getBytes(), buff)));
	}
}

分享到:
评论

相关推荐

    JAVA_MAC地址校验和转换

    Java的`javax.crypto`包提供了丰富的加密工具,可以实现MAC地址的加密和解密。 6. **Java代码示例**: ```java import java.util.Arrays; import java.security.MessageDigest; import javax.crypto.Cipher; ...

    8583协议java实现

    Java实现8583协议的关键在于理解并解析其消息格式。8583报文由多个字段组成,每个字段都有特定的位宽和含义。其中,字段0是消息类型标识,字段11和12是发送者和接收者的系统标识,字段24是MAC(Message ...

    java银联多渠道ISO8583

    java实现的8583发包解包,灵活,扩展性强,8583各域能自定义编码和解码规则,包含标准的银联MAC加密算法(ansi x9.19,ansi x9.9)及一个完整的socket客户端请求服务端的demo,修改mac运算规则时,只要重写...

    加密平台接口JAVA _API 编程手册

    在加密平台接口JAVA _API 中,报文MAC是通过使用指定的密钥生成的,以便在密码服务系统中进行身份验证和数据完整性检查。 加密平台接口JAVA _API 编程手册是一个详细的指南,旨在帮助开发者快速了解和使用加密平台...

    银联8583协议 解包 组包 源码 项目上已使用

    这个过程中涉及的关键技术包括对8583报文结构的理解、字段的解析和编码、以及安全性相关的3DES加密和MAC消息认证代码计算。 3DES(Triple Data Encryption Standard)是一种加强版的DES加密算法,通过三次应用DES...

    wjjmym_java_swamaoq_

    在这个项目中,Java 被用来实现文件管理和加密的核心功能。SWAMAOQ 可能是项目或开发者团队的缩写,但具体含义未在信息中明确。 1. **文件加密**:文件加密是保护数据安全的重要手段,它通过特定的加密算法将原始...

    Java安全学习(密码框架)1

    这里我们将深入探讨几个重要的概念和技术,包括密码框架、加密算法、报文摘要、数字签名以及Java安全套接字。 1. **密码框架**:Java提供了一个密码框架,允许开发者使用各种加密算法,如MD5、AES等。这个框架通过`...

    Java后台开发岗面试笔记.docx

    包括但不限于计算机网络、操作系统、集合框架、JVM内存管理、多线程并发、数据库(如MySQL)、缓存(如Redis)、框架(如Spring)、基础Java知识、系统设计、Linux管理和正则表达式以及设计模式和算法。 在计算机...

    android 文件加解密

    在Android中,可以使用Java的Cipher类来实现这些加密算法。 二、文件解密 文件解密是加密的逆过程,通过解密密钥和算法还原加密后的数据。在Android中,解密同样可以通过Cipher类完成,根据加密时使用的算法和密钥...

    银联IC卡规范第七部分

    9. 报文鉴别代码(MAC):对交易数据及其相关参数进行运算后产生的代码,用于验证报文的完整性。 10. 密文/明文:密文指经过加密算法变换后的信息,而明文则是未加密的信息。 11. 密钥:控制加密转换操作的符号...

    eclipse开发android文件加密小软件简单例子

    4. **报文鉴别(Message Authentication Code, MAC)**:MAC是一种用于验证数据完整性和来源的方法。通常结合对称加密使用,通过共享密钥计算出一个消息验证码,接收方可以通过相同的密钥验证消息是否被篡改。 5. *...

    SSL握手协议的研究

    在Java中,JSSE(Java Secure Socket Extension)提供了实现SSL协议的框架。开发者可以利用JSSE提供的API来处理SSL连接的创建和管理,包括自定义SSL上下文、信任管理器和密钥管理器等。例如,将USB Key融入JSSE,...

    计算机网络&计算机网络

    12.4.2 套接字实现机制 12.4.3 Unix环境下的套接字编程举例 12.5 小结 习题 第13章 DNS域名系统 13.1 域名结构 13.1.1 平面型命名机制 13.1.2 层次型命名机制 13.1.3 层次型名字管理 13.1.4 TCP/IP域名 ...

    计算机网络(汲及内容全面)

    12.4.2 套接字实现机制 12.4.3 Unix环境下的套接字编程举例 12.5 小结 习题 第13章 DNS域名系统 13.1 域名结构 13.1.1 平面型命名机制 13.1.2 层次型命名机制 13.1.3 层次型名字管理 13.1.4 TCP/IP域名 ...

    计算机网络基础知识

    12.4.2 套接字实现机制 12.4.3 Unix环境下的套接字编程举例 12.5 小结 习题 第13章 DNS域名系统 13.1 域名结构 13.1.1 平面型命名机制 13.1.2 层次型命名机制 13.1.3 层次型名字管理 13.1.4 TCP/IP域名 ...

    经典全面系统的网络工程师资料

    12.4.2 套接字实现机制 12.4.3 Unix环境下的套接字编程举例 12.5 小结 习题 第13章 DNS域名系统 13.1 域名结构 13.1.1 平面型命名机制 13.1.2 层次型命名机制 13.1.3 层次型名字管理 13.1.4 TCP/IP域名 ...

    2008上半年程序员考试试题及答案

    2. 数据结构:链表、数组、栈、队列、树(二叉树、AVL树、红黑树)、图等基本数据结构的理解与操作是必考内容,试题可能要求设计算法实现这些数据结构的操作。 3. 算法设计:排序(冒泡排序、快速排序、归并排序等...

Global site tag (gtag.js) - Google Analytics