资源简介

SMS4国密JAVA加密解密完整代码,无异常java类文件,导入即用。Convert.java 内部字符串进制转换类,SMS4.java 国密加密解密处理方法类。TestMain.java 测试类,调用 encrypt 加密 decode 解密

资源截图

代码片段和文件信息

package com.xinghuo.common.SM4;

import java.math.BigInteger;
import java.util.Random;

/**
 * @author leixi.guo
 */
public class Convert {

private static String[] STR_ARR = new String[]{
“a““b““c““d““e““f““g““h““i““j““k““l““m“
“n““o““p““q““r““s““t““u““v““w““x““y“
“z““A““B““C““D““E““F““G““H““I““J““K““L““M“
“N““O““P““Q““R““S““T““U““V““W““X““Y“
“Z““1““2““3““4““5““6““7““8““9““0“
};
/**
 * 用于建立十六进制字符的输出的小写字符数组
 */
private static final char[] DIGITS_LOWER = { ‘0‘ ‘1‘ ‘2‘ ‘3‘ ‘4‘ ‘5‘
‘6‘ ‘7‘ ‘8‘ ‘9‘ ‘a‘ ‘b‘ ‘c‘ ‘d‘ ‘e‘ ‘f‘ };
/**
 * 用于建立十六进制字符的输出的大写字符数组
 */
private static final char[] DIGITS_UPPER = { ‘0‘ ‘1‘ ‘2‘ ‘3‘ ‘4‘ ‘5‘
‘6‘ ‘7‘ ‘8‘ ‘9‘ ‘A‘ ‘B‘ ‘C‘ ‘D‘ ‘E‘ ‘F‘ };

/**
 * 随机生成自定义长度的字符串
 *@param
 *@author leixi.guo
 *@date
 */
public static String generateRandomString(int length){
StringBuffer sb = new StringBuffer();
Random rand = new Random();
for (int i = 0; i < length ; i++){
sb.append(STR_ARR[rand.nextInt(STR_ARR.length)]);
}
return sb.toString();

}


/**
 * 整形转换成网络传输的字节流(字节数组)型数据
 *
 * @param num 一个整型数据
 * @return 4个字节的自己数组
 */
public static byte[] intToBytes(int num) {
byte[] bytes = new byte[4];
bytes[0] = (byte) (0xff & (num >> 0));
bytes[1] = (byte) (0xff & (num >> 8));
bytes[2] = (byte) (0xff & (num >> 16));
bytes[3] = (byte) (0xff & (num >> 24));
return bytes;
}

/**
 * 四个字节的字节数据转换成一个整形数据
 *
 * @param bytes 4个字节的字节数组
 * @return 一个整型数据
 */
public static int byteToInt(byte[] bytes) {
int num = 0;
int temp;
temp = (0x000000ff & (bytes[0])) << 0;
num = num | temp;
temp = (0x000000ff & (bytes[1])) << 8;
num = num | temp;
temp = (0x000000ff & (bytes[2])) << 16;
num = num | temp;
temp = (0x000000ff & (bytes[3])) << 24;
num = num | temp;
return num;
}

/**
 * 长整形转换成网络传输的字节流(字节数组)型数据
 *
 * @param num 一个长整型数据
 * @return 4个字节的自己数组
 */
public static byte[] longToBytes(long num) {
byte[] bytes = new byte[8];
for(int i = 0; i < 8; i++) {
bytes[i] = (byte) (0xff & (num >> (i * 8)));
}

return bytes;
}

/**
 * 大数字转换字节流(字节数组)型数据
 *
 * @param n
 * @return
 */
public static byte[] byteConvert32Bytes(BigInteger n) {
byte tmpd[] = (byte[]) null;
if(n == null) {
return null;
}

if(n.toByteArray().length == 33) {
tmpd = new byte[32];
System.arraycopy(n.toByteArray() 1 tmpd 0 32);
}
else if(n.toByteArray().length == 32) {
tmpd = n.toByteArray();
}
else {
tmpd = new byte[32];
for(int i = 0; i < 32 - n.toByteArray().length; i++) {
tmpd[i] = 0;
}
System.arraycopy(n.toByteArray() 0 tmpd 32 - n.toByteArray().length n.toByteArray().length);
}
return tmpd;
}

/**
 * 换字节流(字节数组)型数据转大数字
 *
 * @param b
 * @return
 */
public static BigInteger byteConvertInteger(byte[]

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-12-19 10:56  SM4\
     文件       15984  2019-12-19 10:39  SM4\Convert.java
     文件       12435  2019-12-19 10:53  SM4\SMS4.java
     文件         450  2019-12-19 10:56  SM4\TestMain.java

评论

共有 条评论