package com.dji.sample.territory.utils.jym;
|
|
import org.bouncycastle.asn1.ASN1EncodableVector;
|
import org.bouncycastle.asn1.ASN1Integer;
|
import org.bouncycastle.asn1.DERSequence;
|
|
import java.io.IOException;
|
import java.math.BigInteger;
|
|
public class Util {
|
private static final char[] DIGITS_LOWER = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
private static final char[] DIGITS_UPPER = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
|
public Util() {
|
}
|
|
public static byte[] intToBytes(int num) {
|
byte[] bytes = new byte[]{(byte)(255 & num >> 0), (byte)(255 & num >> 8), (byte)(255 & num >> 16), (byte)(255 & num >> 24)};
|
return bytes;
|
}
|
|
// public static int byteToInt(byte[] bytes) {
|
// int num = 0;
|
// int temp = (255 & bytes[0]) << 0;
|
// int num = num | temp;
|
// temp = (255 & bytes[1]) << 8;
|
// num |= temp;
|
// temp = (255 & bytes[2]) << 16;
|
// num |= temp;
|
// temp = (255 & bytes[3]) << 24;
|
// num |= temp;
|
// return num;
|
// }
|
|
public static byte[] longToBytes(long num) {
|
byte[] bytes = new byte[8];
|
|
for(int i = 0; i < 8; ++i) {
|
bytes[i] = (byte)((int)(255L & num >> i * 8));
|
}
|
|
return bytes;
|
}
|
|
public static byte[] byteConvert32Bytes(BigInteger n) {
|
byte[] tmpd = (byte[])null;
|
if (n == null) {
|
return null;
|
} else {
|
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;
|
}
|
}
|
|
public static BigInteger byteConvertInteger(byte[] b) {
|
if (b[0] < 0) {
|
byte[] temp = new byte[b.length + 1];
|
temp[0] = 0;
|
System.arraycopy(b, 0, temp, 1, b.length);
|
return new BigInteger(temp);
|
} else {
|
return new BigInteger(b);
|
}
|
}
|
|
public static String getHexString(byte[] bytes) {
|
return getHexString(bytes, true);
|
}
|
|
public static String getHexString(byte[] bytes, boolean upperCase) {
|
String ret = "";
|
|
for(int i = 0; i < bytes.length; ++i) {
|
ret = ret + Integer.toString((bytes[i] & 255) + 256, 16).substring(1);
|
}
|
|
return upperCase ? ret.toUpperCase() : ret;
|
}
|
|
public static void printHexString(byte[] bytes) {
|
for(int i = 0; i < bytes.length; ++i) {
|
String hex = Integer.toHexString(bytes[i] & 255);
|
if (hex.length() == 1) {
|
hex = '0' + hex;
|
}
|
|
System.out.print("0x" + hex.toUpperCase() + ",");
|
}
|
|
System.out.println("");
|
}
|
|
public static byte[] hexStringToBytes(String hexString) {
|
if (hexString != null && !hexString.equals("")) {
|
hexString = hexString.toUpperCase();
|
int length = hexString.length() / 2;
|
char[] hexChars = hexString.toCharArray();
|
byte[] d = new byte[length];
|
|
for(int i = 0; i < length; ++i) {
|
int pos = i * 2;
|
d[i] = (byte)(charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
|
}
|
|
return d;
|
} else {
|
return null;
|
}
|
}
|
|
public static byte charToByte(char c) {
|
return (byte)"0123456789ABCDEF".indexOf(c);
|
}
|
|
public static char[] encodeHex(byte[] data) {
|
return encodeHex(data, true);
|
}
|
|
public static char[] encodeHex(byte[] data, boolean toLowerCase) {
|
return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
|
}
|
|
protected static char[] encodeHex(byte[] data, char[] toDigits) {
|
int l = data.length;
|
char[] out = new char[l << 1];
|
int i = 0;
|
|
for(int var5 = 0; i < l; ++i) {
|
out[var5++] = toDigits[(240 & data[i]) >>> 4];
|
out[var5++] = toDigits[15 & data[i]];
|
}
|
|
return out;
|
}
|
|
public static String encodeHexString(byte[] data) {
|
return encodeHexString(data, true);
|
}
|
|
public static String encodeHexString(byte[] data, boolean toLowerCase) {
|
return encodeHexString(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
|
}
|
|
protected static String encodeHexString(byte[] data, char[] toDigits) {
|
return new String(encodeHex(data, toDigits));
|
}
|
|
public static byte[] decodeHex(char[] data) {
|
int len = data.length;
|
if ((len & 1) != 0) {
|
throw new RuntimeException("Odd number of characters.");
|
} else {
|
byte[] out = new byte[len >> 1];
|
int i = 0;
|
|
for(int j = 0; j < len; ++i) {
|
int f = toDigit(data[j], j) << 4;
|
++j;
|
f |= toDigit(data[j], j);
|
++j;
|
out[i] = (byte)(f & 255);
|
}
|
|
return out;
|
}
|
}
|
|
protected static int toDigit(char ch, int index) {
|
int digit = Character.digit(ch, 16);
|
if (digit == -1) {
|
throw new RuntimeException("Illegal hexadecimal character " + ch + " at index " + index);
|
} else {
|
return digit;
|
}
|
}
|
|
public static String StringToAsciiString(String content) {
|
String result = "";
|
int max = content.length();
|
|
for(int i = 0; i < max; ++i) {
|
char c = content.charAt(i);
|
String b = Integer.toHexString(c);
|
result = result + b;
|
}
|
|
return result;
|
}
|
|
public static String hexStringToString(String hexString, int encodeType) {
|
String result = "";
|
int max = hexString.length() / encodeType;
|
|
for(int i = 0; i < max; ++i) {
|
char c = (char)hexStringToAlgorism(hexString.substring(i * encodeType, (i + 1) * encodeType));
|
result = result + c;
|
}
|
|
return result;
|
}
|
|
public static int hexStringToAlgorism(String hex) {
|
hex = hex.toUpperCase();
|
int max = hex.length();
|
int result = 0;
|
|
for(int i = max; i > 0; --i) {
|
char c = hex.charAt(i - 1);
|
|
int algorism;
|
if (c >= '0' && c <= '9') {
|
algorism = c - 48;
|
} else {
|
algorism = c - 55;
|
}
|
|
result = (int)((double)result + Math.pow(16.0D, (double)(max - i)) * (double)algorism);
|
}
|
|
return result;
|
}
|
|
public static String hexStringToBinary(String hex) {
|
hex = hex.toUpperCase();
|
String result = "";
|
int max = hex.length();
|
|
for(int i = 0; i < max; ++i) {
|
char c = hex.charAt(i);
|
switch(c) {
|
case '0':
|
result = result + "0000";
|
break;
|
case '1':
|
result = result + "0001";
|
break;
|
case '2':
|
result = result + "0010";
|
break;
|
case '3':
|
result = result + "0011";
|
break;
|
case '4':
|
result = result + "0100";
|
break;
|
case '5':
|
result = result + "0101";
|
break;
|
case '6':
|
result = result + "0110";
|
break;
|
case '7':
|
result = result + "0111";
|
break;
|
case '8':
|
result = result + "1000";
|
break;
|
case '9':
|
result = result + "1001";
|
case ':':
|
case ';':
|
case '<':
|
case '=':
|
case '>':
|
case '?':
|
case '@':
|
default:
|
break;
|
case 'A':
|
result = result + "1010";
|
break;
|
case 'B':
|
result = result + "1011";
|
break;
|
case 'C':
|
result = result + "1100";
|
break;
|
case 'D':
|
result = result + "1101";
|
break;
|
case 'E':
|
result = result + "1110";
|
break;
|
case 'F':
|
result = result + "1111";
|
}
|
}
|
|
return result;
|
}
|
|
public static String AsciiStringToString(String content) {
|
String result = "";
|
int length = content.length() / 2;
|
|
for(int i = 0; i < length; ++i) {
|
String c = content.substring(i * 2, i * 2 + 2);
|
int a = hexStringToAlgorism(c);
|
char b = (char)a;
|
String d = String.valueOf(b);
|
result = result + d;
|
}
|
|
return result;
|
}
|
|
public static String algorismToHexString(int algorism, int maxLength) {
|
String result = "";
|
result = Integer.toHexString(algorism);
|
if (result.length() % 2 == 1) {
|
result = "0" + result;
|
}
|
|
return patchHexString(result.toUpperCase(), maxLength);
|
}
|
|
public static String byteToString(byte[] bytearray) {
|
String result = "";
|
int length = bytearray.length;
|
|
for(int i = 0; i < length; ++i) {
|
char temp = (char)bytearray[i];
|
result = result + temp;
|
}
|
|
return result;
|
}
|
|
public static int binaryToAlgorism(String binary) {
|
int max = binary.length();
|
int result = 0;
|
|
for(int i = max; i > 0; --i) {
|
char c = binary.charAt(i - 1);
|
int algorism = c - 48;
|
result = (int)((double)result + Math.pow(2.0D, (double)(max - i)) * (double)algorism);
|
}
|
|
return result;
|
}
|
|
public static String algorismToHEXString(int algorism) {
|
String result = "";
|
result = Integer.toHexString(algorism);
|
if (result.length() % 2 == 1) {
|
result = "0" + result;
|
}
|
|
result = result.toUpperCase();
|
return result;
|
}
|
|
public static String patchHexString(String str, int maxLength) {
|
String temp = "";
|
|
for(int i = 0; i < maxLength - str.length(); ++i) {
|
temp = "0" + temp;
|
}
|
|
str = (temp + str).substring(0, maxLength);
|
return str;
|
}
|
|
public static int parseToInt(String s, int defaultInt, int radix) {
|
boolean var3 = false;
|
|
int i;
|
try {
|
i = Integer.parseInt(s, radix);
|
} catch (NumberFormatException var5) {
|
i = defaultInt;
|
}
|
|
return i;
|
}
|
|
public static int parseToInt(String s, int defaultInt) {
|
boolean var2 = false;
|
|
int i;
|
try {
|
i = Integer.parseInt(s);
|
} catch (NumberFormatException var4) {
|
i = defaultInt;
|
}
|
|
return i;
|
}
|
|
public static byte[] hexToByte(String hex) throws IllegalArgumentException {
|
if (hex.length() % 2 != 0) {
|
throw new IllegalArgumentException();
|
} else {
|
char[] arr = hex.toCharArray();
|
byte[] b = new byte[hex.length() / 2];
|
int i = 0;
|
int j = 0;
|
|
for(int l = hex.length(); i < l; ++j) {
|
String swap = "" + arr[i++] + arr[i];
|
int byteint = Integer.parseInt(swap, 16) & 255;
|
b[j] = (new Integer(byteint)).byteValue();
|
++i;
|
}
|
|
return b;
|
}
|
}
|
|
public static String byteToHex(byte[] b) {
|
if (b == null) {
|
throw new IllegalArgumentException("Argument b ( byte array ) is null! ");
|
} else {
|
String hs = "";
|
String stmp = "";
|
|
for(int n = 0; n < b.length; ++n) {
|
stmp = Integer.toHexString(b[n] & 255);
|
if (stmp.length() == 1) {
|
hs = hs + "0" + stmp;
|
} else {
|
hs = hs + stmp;
|
}
|
}
|
|
return hs.toUpperCase();
|
}
|
}
|
|
public static byte[] subByte(byte[] input, int startIndex, int length) {
|
byte[] bt = new byte[length];
|
|
for(int i = 0; i < length; ++i) {
|
bt[i] = input[i + startIndex];
|
}
|
|
return bt;
|
}
|
|
public static String SM2SignHardToSoft(String hardSign) {
|
byte[] bytes = hexToByte(hardSign);
|
byte[] r = new byte[bytes.length / 2];
|
byte[] s = new byte[bytes.length / 2];
|
System.arraycopy(bytes, 0, r, 0, bytes.length / 2);
|
System.arraycopy(bytes, bytes.length / 2, s, 0, bytes.length / 2);
|
ASN1Integer d_r = new ASN1Integer(byteConvertInteger(r));
|
ASN1Integer d_s = new ASN1Integer(byteConvertInteger(s));
|
ASN1EncodableVector v2 = new ASN1EncodableVector();
|
v2.add(d_r);
|
v2.add(d_s);
|
DERSequence sign = new DERSequence(v2);
|
String result = null;
|
|
try {
|
result = byteToHex(sign.getEncoded());
|
return result;
|
} catch (IOException var10) {
|
var10.printStackTrace();
|
throw new RuntimeException(var10);
|
}
|
}
|
}
|