/*
* @(#)MacUtil.java 1.0 2013-3-28
*
* Copyright (c) 2009 Sunyard System Engineering Co., Ltd.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Sunyard System Engineering Co., Ltd. ("Confidential Information").
* You shall not disclose such Confidential Information and shall use it
* only in accordance with the terms of the license agreement you entered
* into with Sunyard.
*/
/* Modification History:
* Date Author Version Description
* ------------------------------------------------------------------
*
*/
package com.sunyard.etp.ag.util;
import java.io.UnsupportedEncodingException;
import java.util.Random;
/**
*
*
* @version 1.0 2013-3-28
* @author openzhang
*/
public class MacUtil {
private static final int[][] s1 =
{
{14,4, 13,1, 2, 15,11,8, 3, 10,6, 12,5, 9, 0, 7},
{0, 15,7, 4, 14,2, 13,1, 10,6, 12,11,9, 5, 3, 8},
{4, 1, 14,8, 13,6, 2, 11,15,12,9, 7, 3, 10,5, 0},
{15,12,8, 2, 4, 9, 1, 7, 5, 11,3, 14,10,0, 6, 13}
};
private static final int[][] s2 =
{
{15,1, 8, 14,6, 11,3, 4, 9, 7, 2, 13,12,0, 5, 10},
{3, 13,4, 7, 15,2, 8, 14,12,0, 1, 10,6, 9, 11,5},
{0, 14,7, 11,10,4, 13,1, 5, 8, 12,6, 9, 3, 2, 15},
{13,8, 10,1, 3, 15,4, 2, 11,6, 7, 12,0, 5, 14,9}
};
private static final int[][] s3 =
{
{10,0, 9, 14,6, 3, 15,5, 1, 13,12,7, 11,4, 2, 8},
{13,7, 0, 9, 3, 4, 6, 10,2, 8, 5, 14,12,11,15,1},
{13,6, 4, 9, 8, 15,3, 0, 11,1, 2, 12,5, 10,14,7},
{1, 10,13,0, 6, 9, 8, 7, 4, 15,14,3, 11,5, 2, 12}
};
private static final int[][] s4 =
{
{7, 13,14,3, 0, 6, 9, 10,1, 2, 8, 5, 11,12,4, 15},
{13,8, 11,5, 6, 15,0, 3, 4, 7, 2, 12,1, 10,14,9},
{10,6, 9, 0, 12,11,7, 13,15,1, 3, 14,5, 2, 8, 4},
{3, 15,0, 6, 10,1, 13,8, 9, 4, 5, 11,12,7, 2, 14}
};
private static final int[][] s5 =
{
{2, 12,4, 1, 7, 10,11,6, 8, 5, 3, 15,13,0, 14,9},
{14,11,2, 12,4, 7, 13,1, 5, 0, 15,10,3, 9, 8, 6},
{4, 2, 1, 11,10,13,7, 8, 15,9, 12,5, 6, 3, 0, 14},
{11,8, 12,7, 1, 14,2, 13,6, 15,0, 9, 10,4, 5, 3}
};
private static final int[][] s6 =
{
{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11},
{10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8},
{9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6},
{4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}
};
private static final int[][] s7 =
{
{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1},
{13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6},
{1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2},
{6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}
};
private static final int[][] s8 =
{
{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7},
{1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2},
{7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8},
{2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}
};
private static final int[] ip =
{58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7};
private static final int[] _ip =
{40, 8, 48, 16, 56, 24, 64, 32,
39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30,
37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28,
35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26,
33, 1, 41, 9, 49, 17, 57, 25};
private static final int[] LS = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
private static int[][] subKey = new int[16][48];
private static int HEX = 0;
private static int ASC = 1;
/**
* 将16进制字符转换成对应的int类型值:如字符'A'被转换后为10;'B'将被转换为11
* @param ch 需要被转换的目标字符
* @return 转换后的int类型值
* @throws Exception 如果传入字符为非16进制字符,将会报'getIntByChar was wrong'自定义异常
*/
public static int getIntByChar(char ch) throws Exception
{
char t = Character.toUpperCase(ch);
int i = 0;
switch(t){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
i = Integer.parseInt(Character.toString(t));
break;
case 'A':
i = 10;
break;
case 'B':
i = 11;
break;
case 'C':
i = 12;
break;
case 'D':
i = 13;
break;
case 'E':
i = 14;
break;
case 'F':
i = 15;
break;
default:
throw new Exception("getIntByChar was wrong");
}
return i;
}
/**
* 将16进制表示的字符串转换为0,1组成的int数组
* 列如:"ABC" 被转换后的结果为{1,0,1,0,1,0,1,1,1,1,0,0}
* @param source 十六进制字符串
* @return 0,1组成的int数组
*/
public static int[] string2Binary(String source)
{
int len = source.length();
int[] dest = new int[len*4];
char[] arr = source.toCharArray();
for(int i=0; i<len; i++)
{
int t = 0;
try {
t = getIntByChar(arr[i]);
} catch (Exception e)
{
e.printStackTrace();
}
String[] str = Integer.toBinaryString(t).split("");
int k = i*4 + 3;
for(int j=str.length-1; j>0; j--)
{
dest[k] = Integer.parseInt(str[j]);
k--;
}
}
return dest;
}
/**
* 完成对底数X的Y次方操作,如输入值分别为:2和4 返回值为16
* @param x 执行幂操作的底数
* @param y 执行幂操作的指数
* @return 幂操作的结果
*/
public static int getXY(int x,int y)
{
int temp = x;
if(y == 0) x = 1;
for(int i=2; i<=y; i++)
{
x *= temp;
}
return x;
}
/**
* 将由0,1组成的长度为4的字符串转化为对应的16进制字符串表示,例如输入字符串"1111",输出值为"F"
* 注意此方法输入的字符串长度最大为4,一次只能转换成为一个16进制字符
* @param s 0,1组成的字符串
* @return 转换后的16进制字符
*/
public static String binary2Hex(String s)
{
int len = s.length();
int result = 0;
int k = 0;
if(len > 4)
return null;
for(int i=len; i>0; i--)
{
result += Integer.parseInt(s.substring(i-1, i))*getXY(2,k);
k++;
}
switch(result){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
return ""+result;
case 10:
return "A";
case 11:
return "B";
case 12:
return "C";
case 13:
return "D";
case 14:
return "E";
case 15:
return "F";
default :
return null;
}
}
/**
* 将一个小于16的数转换为一个对应的十六进制字符
* @param i 小于16的整数
* @return 十六进制字符
*/
public static String int2Hex(int i)
{
switch(i){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
return ""+i;
case 10:
return "A";
case 11:
return "B";
case 12:
return "C";
case 13:
return "D";
case 14:
return "E";
case 15:
return "F";
default :
return null;
}
}
/**
* 将0,1组成的字符串转换为对应的十六进制字符串,例如输入字符串"111100001111"输出为"FOF"
* 此方法输入的字符串长度不限
* @param s 0,1组成的字符串
* @return 十六进制字符串
*/
public static String binary2ASC(String s)
{
String str = "";
int ii = 0;
int len = s.length();
if(len%4 != 0)
{
while(ii<4-len%4)
{
s = "0" + s;
}
}
for(int i=0; i<len/4; i++)
{
str += binary2Hex(s.substring(i*4, i*4+4));
}
return str;
}
public static int[] changeIP(int[] source)
{
int[] dest = new int[64];
for(int i=0; i<64; i++)
{
dest[i] = source[ip[i]-1];
}
return dest;
}
public static int[] changeInverseIP(int[] source)
{
int[] dest = new int[64];
for(int i=0; i<64; i++)
{
de
java版 银联ANSI-X9.9-MAC算法
4星 · 超过85%的资源 需积分: 5 9 浏览量
2016-01-07
11:30:47
上传
评论
收藏 8KB RAR 举报
java_huimie
- 粉丝: 1
- 资源: 1
最新资源
- 20、Java SSM 生鲜果蔬电商系统【优质毕业设计分享】.rar
- Python桌面应用开发图书信息管理系统 应用Python开发,基于最新的QT6桌面开发 用于本科专科阶段毕设模板
- 很好的一个开发的工具,FG800P,非常好的开发的过程 exe zip
- 20、Java SSM 生鲜果蔬电商系统【优质毕业设计分享】.rar
- Swift语言开发第三方微博项目
- 美丽的过程代码开发,开发一个过程需要美丽的过程,程序的代码往往属于网络的不多,但是008GF也是可以反复使用的,试试看吧
- WPF MVVM 模式 监听窗口关闭事件
- Jupyter Notebook《阿尔茨海默症的识别》+源代码+文档说明
- springboot2.4从实战到源码分析Demo源码工程.zip
- 非常快速的系统,网络的重要性的体现,作为800系列,FG很好的实现了这个目标
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页