📄 operator.java
字号:
public class Operator {
// 异或
public byte[] XOR(byte[] w, byte[] k) {
byte[] Z = new byte[4];
for (int i = 0; i < 4; i++) {
Z[i] = (byte) (w[i] ^ k[i]);
}
return Z;
}
// 将String变成Byte数组
public byte[] ToByte(String Z) {
byte[] ZK = new byte[Z.length()];
for (int i = 0; i < Z.length(); i++) {
ZK[i] = (byte) Z.charAt(i);
}
return ZK;
}
// 将String变成Byte数组
public void ToByte(byte[][] ZK, String Z) {
int zc = Z.length() / 4;
for (int j = 0; j < zc; j++) {
int fenz = (j + 1) * 4;
String Z_K = Z.substring((j * 4), fenz);
for (int i = 0; i < 4; i++) {
ZK[j][i] = (byte) Z_K.charAt(i);
}
}
}
// 将Byte数组变成String
public String ToString(byte[] Z) {
String z = "";
for (int i = 0; i < Z.length; i++) {
char m = (char) Z[i];
z += m;
}
return z;
}
// 异或
public byte[] XOR(byte[] w, byte[] z, int kc) {
byte[] Z = new byte[kc];
for (int i = 0; i < kc; i++) {
Z[i] = (byte) (w[i] ^ z[i]);
}
return Z;
}
// 异或
public byte[] XOR(byte[] w, byte[] z, byte[] k, int kc) {
byte[] Z = new byte[kc];
for (int i = 0; i < kc; i++) {
Z[i] = (byte) (w[i] ^ z[i] ^ k[i]);
}
return Z;
}
// AES乘法
public byte mulByTwoPolynomials(byte w, byte k) {
int i = 0;
byte x = k;
byte m = 0x00;
while (x != 0) {
if (x < 0) {
int j = 8;
if (i != 0) {
j = 8 - i;
}
byte Z = mulByTwoPolynomials(w, j - 1);
x = (byte) (x ^ 0x80);
m = (byte) (m ^ Z);
}
else {
x = (byte) (x << 1);
i++;
}
}
return m;
}
public byte mulByTwoPolynomials(byte x, int k) {
int X = x;
for (int i = 0; i < k; i++) {
X = X << 1;
if (X > 255) {
X = X ^ 0x011b;
}
}
return (byte) X;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -