/**
*
*/
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的`javax.crypto`包提供了丰富的加密工具,可以实现MAC地址的加密和解密。 6. **Java代码示例**: ```java import java.util.Arrays; import java.security.MessageDigest; import javax.crypto.Cipher; ...
Java实现8583协议的关键在于理解并解析其消息格式。8583报文由多个字段组成,每个字段都有特定的位宽和含义。其中,字段0是消息类型标识,字段11和12是发送者和接收者的系统标识,字段24是MAC(Message ...
java实现的8583发包解包,灵活,扩展性强,8583各域能自定义编码和解码规则,包含标准的银联MAC加密算法(ansi x9.19,ansi x9.9)及一个完整的socket客户端请求服务端的demo,修改mac运算规则时,只要重写...
在加密平台接口JAVA _API 中,报文MAC是通过使用指定的密钥生成的,以便在密码服务系统中进行身份验证和数据完整性检查。 加密平台接口JAVA _API 编程手册是一个详细的指南,旨在帮助开发者快速了解和使用加密平台...
这个过程中涉及的关键技术包括对8583报文结构的理解、字段的解析和编码、以及安全性相关的3DES加密和MAC消息认证代码计算。 3DES(Triple Data Encryption Standard)是一种加强版的DES加密算法,通过三次应用DES...
在这个项目中,Java 被用来实现文件管理和加密的核心功能。SWAMAOQ 可能是项目或开发者团队的缩写,但具体含义未在信息中明确。 1. **文件加密**:文件加密是保护数据安全的重要手段,它通过特定的加密算法将原始...
这里我们将深入探讨几个重要的概念和技术,包括密码框架、加密算法、报文摘要、数字签名以及Java安全套接字。 1. **密码框架**:Java提供了一个密码框架,允许开发者使用各种加密算法,如MD5、AES等。这个框架通过`...
包括但不限于计算机网络、操作系统、集合框架、JVM内存管理、多线程并发、数据库(如MySQL)、缓存(如Redis)、框架(如Spring)、基础Java知识、系统设计、Linux管理和正则表达式以及设计模式和算法。 在计算机...
在Android中,可以使用Java的Cipher类来实现这些加密算法。 二、文件解密 文件解密是加密的逆过程,通过解密密钥和算法还原加密后的数据。在Android中,解密同样可以通过Cipher类完成,根据加密时使用的算法和密钥...
9. 报文鉴别代码(MAC):对交易数据及其相关参数进行运算后产生的代码,用于验证报文的完整性。 10. 密文/明文:密文指经过加密算法变换后的信息,而明文则是未加密的信息。 11. 密钥:控制加密转换操作的符号...
4. **报文鉴别(Message Authentication Code, MAC)**:MAC是一种用于验证数据完整性和来源的方法。通常结合对称加密使用,通过共享密钥计算出一个消息验证码,接收方可以通过相同的密钥验证消息是否被篡改。 5. *...
在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域名 ...
2. 数据结构:链表、数组、栈、队列、树(二叉树、AVL树、红黑树)、图等基本数据结构的理解与操作是必考内容,试题可能要求设计算法实现这些数据结构的操作。 3. 算法设计:排序(冒泡排序、快速排序、归并排序等...