AES加密算法软件实现-Java

参考资料

  1. https://blog.csdn.net/qq_28205153/article/details/55798628
  2. https://www.bilibili.com/video/BV1HK4y1s7Np?spm_id_from=333.337.search-card.all.click

执行结果


程序源码

仅实现了128


/*************************************************************************  > File Name: AES.java> Author: Yu/Jinyang> Created Time: 2021/10/10************************************************************************/
import java.util.*;
// import java.lang.*;public class AES {public static void main(String[] args) {Scanner s = new Scanner(System.in);System.out.println("请输入十六进制128位明文:");String ming = s.next();System.out.println("请输入十六进制128位密钥:");String k = s.next();s.close();int[][] mingwen = Algorithm.DataFormat(ming);// 4,8int[][] key = Algorithm.DataFormat(k);// 4,8int[][] key1 = Algorithm.DataFormat(k);// 存一份为解密用// mingwen = Algorithm.transporsition(mingwen);// key = Algorithm.transporsition(key);// key1=Algorithm.transporsition(key1);// 加密过程正式开始int[][] miwen = Algorithm.encoder(mingwen, key);System.out.println("\n加密后的密文为:");for (int i = 0; i < miwen.length; i++) {for (int j = 0; j < miwen[0].length; j++) {System.out.printf("%x", miwen[i][j]);}}int[][] mingwen2 = Algorithm.decoder(miwen, key1);System.out.println("\n重新解密后的明文为:");for (int i = 0; i < mingwen2.length; i++) {for (int j = 0; j < mingwen2[0].length; j++) {System.out.printf("%x", mingwen2[i][j]);}}// middle = Algorithm.S_Box(mingwen);// middle = Algorithm.ShiftRow(middle);// //ceshi// int[][] temp = { { 0xc9,0xe5,0xfd,0x2b },// { 0x7a,0xf2,0x78,0x6e },// { 0x63,0x9c,0x26,0x67 },// { 0xb0,0xa7,0x82,0xe5 } };// int[][] tem2 = Algorithm.change4To8(temp);// temp=Algorithm.change8To4(tem2);// middle =Algorithm.ColumnMix(tem2);// int [][] key1= Algorithm.keyExtention(key, 1);// for (int i = 0; i < 4; i++) {// for (int j = 0; j < 8; j++) {// System.out.printf("%x ", key1[i][j]);// }// System.out.println("\n");// }// System.out.println("/n");// for (int i = 0; i < 4; i++) {// for (int j = 0; j < 8; j++) {// System.out.print(key[i][j] + " ");// }// }}
}class Algorithm {static int[][] DataFormat(String s) {// 数据格式转换,将十六进制字符串转换为数据表输出int[][] a = new int[4][8];for (int i = 0; i < 4; i++) {for (int j = 0; j < 8; j++) {a[i][j] = Character.digit(s.charAt(i * 8 + j), 16);}}return a;}static int[][] S_Box(int[][] a) {// s盒变换int[][] S = {{ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 },{ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 },{ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 },{ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 },{ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 },{ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf },{ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 },{ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 },{ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 },{ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb },{ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 },{ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 },{ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a },{ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e },{ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf },{ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 } };int[][] mi = new int[a.length][a[0].length];for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[0].length; j += 2) {int c = S[a[i][j]][a[i][j + 1]];mi[i][j] = (c & 0xf0) >> 4;mi[i][j + 1] = c & 0x0f;}}return mi;}static int[][] ShiftRow(int[][] a) {// 行移位int[][] s = new int[4][8];for (int i = 0; i < 4; i++) {for (int j = 0; j < 8; j++) {s[i][j] = a[i][(j + i * 2) % 8];}}return s;}static int[][] ColumnMix(int[][] a) {// 列混合int[][] s = new int[4][8];int[][] matrix = { { 2, 3, 1, 1 }, { 1, 2, 3, 1 }, { 1, 1, 2, 3 }, { 3, 1, 1, 2 } };int[][] amiddle = Algorithm.change8To4(a);// 4,4int[][] middle = new int[4][4];for (int i = 0; i < 4; i++) {int[][] t = new int[4][1];for (int j = 0; j < 4; j++) {// 取出列t[j][0] = amiddle[j][i];}t = matrixMul(matrix, t);// 矩阵乘for (int j = 0; j < 4; j++) {// 写入列middle[j][i] = t[j][0];}}s = Algorithm.change4To8(middle);return s;}static int[][] change8To4(int[][] a) {// 将原来的八位转换为四位便于矩阵相乘int[][] ret = new int[4][4];for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {ret[i][j] = ((a[i][j * 2]) << 4) + a[i][j * 2 + 1];}}return ret;}static int[][] change4To8(int[][] a) {int[][] ret = new int[4][8];for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {ret[i][2 * j] = (a[i][j] & 0xf0) >> 4;ret[i][2 * j + 1] = a[i][j] & 0x0f;}}return ret;}static int[][] matrixMul(int[][] a, int[][] b) {// 有限域上的矩阵乘 4,1int[][] result = new int[a.length][b[0].length];for (int i = 0; i < a.length; i++) {for (int j = 0; j < b[0].length; j++) {int t = 0;for (int k = 0; k < a[0].length; k++) {t ^= Algorithm.mulInDomain(a[i][k], b[k][j]);// 异或等, 乘法重新定义}result[i][j] = t;}}return result;}static int mulInDomain(int a, int b) {// 有限域乘法int t1, t2, t3, t4;if ((a & 0x01) == 1) {// 第一位t1 = b;} else {t1 = 0;}if ((a & 0x02) == 2) {// 第二位t2 = mul2InDomain(b);} else {t2 = 0;}if ((a & 0x04) == 4) {// 第三位t3 = mul2InDomain(mul2InDomain(b));} else {t3 = 0;}if ((a & 0x08) == 8) {// 第四位t4 = mul2InDomain(mul2InDomain(mul2InDomain(b)));} else {t4 = 0;}return t1 ^ t2 ^ t3 ^ t4;// if (a == 1) {// return b;// } else if (a == 2) {// 可以将乘2的部分单独写成函数,这里最多是3,故先不管了// return mul2InDomain(b);// } else if (a == 3) {// if ((b & 0x80) >> 7 == 0) {// return ((b << 1) & 0xfe) ^ b;// } else {// return (((b << 1) & 0xfe) ^ 0x1b) ^ b;// }// } else {// System.out.println("有限域乘出错!");// return 0;// }}static int mul2InDomain(int b) {if ((b & 0x80) >> 7 == 0) {return (b << 1) & 0xfe;} else {return ((b << 1) & 0xfe) ^ 0x1b;}}static int[][] keyExtention(int[][] prekey, int t) {// 密钥扩展int[][] nextkey = new int[4][8];for (int i = 0; i < 4; i++) {if (i == 0) {int[] t1 = Algorithm.T(prekey[3], t);for (int j = 0; j < 8; j++) {nextkey[i][j] = t1[j] ^ prekey[0][j];}// System.out.println("\n将prekey[4]进行T变换后的结果:");// for(int j=0;j<8;j++){// System.out.print(t1[j]);// }} else {for (int j = 0; j < 8; j++) {nextkey[i][j] = nextkey[i - 1][j] ^ prekey[i][j];}}}return nextkey;}static int[][] transporsition(int[][] prekey){//转置int[][] pk = new int[4][8];for (int i = 0; i < 4; i++) {for (int j = 0; j < 8; j++) {pk[i][j] = prekey[i][j];}}for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {prekey[i][j * 2] = pk[j][i * 2];prekey[i][j * 2 + 1] = pk[j][i * 2 + 1];}}return prekey;}static int[] T(int[] k4, int lun) {// T变换(密钥扩展用)int[] nextk4 = new int[8];if (lun < 9) {// 将轮数转换为相应的数字.lun = 0x1 << (lun - 1);} else if (lun == 9) {lun = 0x1b;} else if (lun == 10) {lun = 0x36;} else {System.out.println("轮转换出错!");}int[] lunc = { (lun & 0xf0) >> 4, lun & 0x0f, 0, 0, 0, 0, 0, 0 };for (int j = 0; j < 8; j++)// 移位操作nextk4[j] = k4[(j + 2) % 8];int[][] k42w = new int[1][8];k42w[0] = nextk4;// 为了调用sbox需要传入二维数组k42w = Algorithm.S_Box(k42w);nextk4 = k42w[0];for (int i = 0; i < nextk4.length; i++) {nextk4[i] = nextk4[i] ^ lunc[i];}return nextk4;}static int[][] addRoundKey(int[][] a, int[][] b) {// 轮密钥加int[][] re = new int[4][8];for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[0].length; j++) {re[i][j] = a[i][j] ^ b[i][j];}}return re;}static int[][] encoder(int[][] mingwen, int[][] key) {// 加密方法int[][] middle = Algorithm.addRoundKey(mingwen, key);// System.out.println("首先进行轮密钥加后的结果:");// for (int i = 0; i < middle.length; i++) {// for (int j = 0; j < middle[0].length; j++) {// System.out.printf("%x", middle[i][j]);// }// }for (int i = 1; i < 10; i++) {middle = Algorithm.S_Box(middle);// System.out.printf("\n第%d次S盒后的结果:", i);// for (int i1 = 0; i1 < middle.length; i1++) {// for (int j = 0; j < middle[0].length; j++) {// System.out.printf("%x", middle[i1][j]);// }// }middle = Algorithm.transporsition(middle);middle = Algorithm.ShiftRow(middle);// System.out.printf("\n第%d次行移位后的结果:", i);// for (int i1 = 0; i1 < middle.length; i1++) {// for (int j = 0; j < middle[0].length; j++) {// System.out.printf("%x", middle[i1][j]);// }// }middle = Algorithm.ColumnMix(middle);// System.out.printf("\n第%d次列混合后的结果:", i);// for (int i1 = 0; i1 < middle.length; i1++) {// for (int j = 0; j < middle[0].length; j++) {// System.out.printf("%x", middle[i1][j]);// }// }middle = Algorithm.transporsition(middle);key = Algorithm.keyExtention(key, i);// System.out.printf("\n第%d次密钥转换后的密钥:", i);// for (int i1 = 0; i1 < key.length; i1++) {// for (int j = 0; j < key[0].length; j++) {// System.out.printf("%x", key[i1][j]);// }// }middle = Algorithm.addRoundKey(middle, key);// System.out.printf("\n第%d次加密后的结果:", i);// for (int i1 = 0; i1 < middle.length; i1++) {// for (int j = 0; j < middle[0].length; j++) {// System.out.printf("%x", middle[i1][j]);// }// }}// 第十轮不用列混合middle = Algorithm.S_Box(middle);middle = Algorithm.transporsition(middle);middle = Algorithm.ShiftRow(middle);key = Algorithm.keyExtention(key, 10);middle = Algorithm.transporsition(middle);middle = Algorithm.addRoundKey(middle, key);return middle;}static int[][] S_Box_(int[][] a) {// s盒变换逆int[][] S = {{ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb },{ 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb },{ 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e },{ 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 },{ 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 },{ 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 },{ 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 },{ 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b },{ 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 },{ 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e },{ 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b },{ 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 },{ 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f },{ 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef },{ 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 },{ 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d } };int[][] mi = new int[a.length][a[0].length];for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[0].length; j += 2) {int c = S[a[i][j]][a[i][j + 1]];mi[i][j] = (c & 0xf0) >> 4;mi[i][j + 1] = c & 0x0f;}}return mi;}static int[][] ShiftRow_(int[][] a) {// 行移位逆int[][] s = new int[4][8];for (int i = 0; i < 4; i++) {for (int j = 0; j < 8; j++) {s[i][j] = a[i][(j + 8 - i * 2) % 8];}}return s;}static int[][] ColumnMix_(int[][] a) {// 列混合逆int[][] s = new int[4][8];int[][] matrix = { { 0x0e, 0x0b, 0x0d, 0x09 }, { 0x09, 0x0e, 0x0b, 0x0d }, { 0x0d, 0x09, 0x0e, 0x0b },{ 0x0b, 0x0d, 0x09, 0x0e } };int[][] amiddle = Algorithm.change8To4(a);// 4,4int[][] middle = new int[4][4];for (int i = 0; i < 4; i++) {int[][] t = new int[4][1];for (int j = 0; j < 4; j++) {// 取出列t[j][0] = amiddle[j][i];}t = matrixMul(matrix, t);// 矩阵乘for (int j = 0; j < 4; j++) {// 写入列middle[j][i] = t[j][0];}}s = Algorithm.change4To8(middle);return s;}static int[][] decoder(int[][] miwen, int[][] key) {int[][][] keyExtentioned = new int[11][][];keyExtentioned[0] = key;for (int i = 1; i < 11; i++) {keyExtentioned[i] = keyExtention(keyExtentioned[i - 1], i);}// for (int i = 0; i < 10; i++) {//     int[][] pk2 = new int[4][8];//     for (int k = 0; k < 4; k++) {//         for (int j = 0; j < 8; j++) {//             pk2[k][j] = keyExtentioned[i][k][j];//         }//     }//     for (int k = 0; k < 4; k++) {//         for (int j = 0; j < 4; j++) {//             keyExtentioned[i][k][j * 2] = pk2[j][k * 2];//             keyExtentioned[i][k][j * 2 + 1] = pk2[j][k * 2 + 1];//         }//     }// }int[][] middle = addRoundKey(miwen, keyExtentioned[10]);middle = Algorithm.transporsition(middle);// System.out.println("解密过程,第十轮密钥为:");// for (int i = 0; i < keyExtentioned[10].length; i++) {//     for (int j = 0; j < keyExtentioned[10][0].length; j++) {//         System.out.printf("%x", keyExtentioned[10][i][j]);//     }// }// System.out.println("\n解密过程,首先进行轮密钥加后的结果:");// for (int i = 0; i < middle.length; i++) {//     for (int j = 0; j < middle[0].length; j++) {//         System.out.printf("%x", middle[i][j]);//     }// }for (int i = 9; i > 0; i--) {middle = ShiftRow_(middle);// System.out.println("\n解密过程,进行行移位逆后的结果:");// for (int k = 0; k < middle.length; k++) {//     for (int j = 0; j < middle[0].length; j++) {//         System.out.printf("%x", middle[k][j]);//     }// }middle = S_Box_(middle);// System.out.println("\n解密过程,进行s盒逆后的结果:");// for (int k = 0; k < middle.length; k++) {//     for (int j = 0; j < middle[0].length; j++) {//         System.out.printf("%x", middle[k][j]);//     }// }middle = Algorithm.transporsition(middle);middle = addRoundKey(middle, keyExtentioned[i]);// System.out.println("\n解密过程,第i轮密钥为:");// for (int k = 0; k < keyExtentioned[i].length; k++) {//     for (int j = 0; j < keyExtentioned[i][0].length; j++) {//         System.out.printf("%x", keyExtentioned[i][k][j]);//     }// }// System.out.println("\n解密过程,进行轮密钥加后的结果:");// for (int k = 0; k < middle.length; k++) {//     for (int j = 0; j < middle[0].length; j++) {//         System.out.printf("%x", middle[k][j]);//     }// }middle = Algorithm.transporsition(middle);middle = ColumnMix_(middle);// System.out.println("\n解密过程,进行列混合逆后的结果:");// for (int k = 0; k < middle.length; k++) {//     for (int j = 0; j < middle[0].length; j++) {//         System.out.printf("%x", middle[k][j]);//     }// }}// 第十轮middle = ShiftRow_(middle);middle = S_Box_(middle);middle = Algorithm.transporsition(middle);middle = addRoundKey(middle, keyExtentioned[0]);return middle;}
}
// 3CA10B2157F01916902E1380ACC107BD

AES加密算法软件实现-Java相关推荐

  1. AES加密算法原理及java android实现

    AES当今最流行的对称加密算法之一,是DES的替代者. 密钥是AES算法实现加密和解密的根本.对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥. AES支持三种长度的密钥: ...

  2. AES加密算法及演示程序(GO-算法核心实现+Python-前端演示系统)

    一. 个人感悟 该程序实现了AES加密算法的软件实现,使用Golang语言实现核心算法,使用Python实现前端展示程序,功能有字符串的加解密演示.文件的加解密演示. 首先呢,其实AES加密算法我去年 ...

  3. AES加密算法java实现

    转载自: https://blog.csdn.net/zyhlwzy/article/details/77948165 AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度 ...

  4. JS 与 JAVA 跨语言实现 RSA 和 AES加密算法

    简介: 开发中为了数据的安全性使用加密算法对数据进行加密是一种很常见的情况,但就一种语言来说,直接使用提供的相应的库进行少许封装是一件很容易的事.但是在一些情况下我们可能需要跨语言来实现,比如前后端分 ...

  5. java delphi aes加密算法_Delphi AES,又一个加密算法例子

    /// //AES DEMO V1.0// //作者:ksaiy// //欢迎使用由ksaiy制作的AES加密算法演示程序,此算法为标准的AES算法,你可以根据的 //的自己需要进行变形.具体怎么操作 ...

  6. AES加密算法在Java中的应用

    1.加密算法 一两个月没写过博客了,上次把尚筹网的博客补了一波,然后就在找工作,这不,这个月刚入职,领导给了个代码优化的任务,使用SornarQube对项目代码进行分析,然后根据分析出来的点逐点优化. ...

  7. AES加密算法 Java与Python跨平台实现

    AES加密算法 Java与Python跨平台实现 什么是AES Java的实现 Python的实现 结果 什么是AES Note: 网上有很多实现代码但是鱼龙混杂,笔者摸索了半天,实现了AES加密文本 ...

  8. aes加密算法 java实现,AES加密算法的java实现

    AES加密算法的java实现 package com.encryp; import java.security.InvalidKeyException; import java.security.No ...

  9. JAVA:实现AES 加密算法(附完整源码)

    JAVA:实现AES 加密算法 package com.thealgorithms.ciphers;import javax.crypto.*; import java.security.Invali ...

  10. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

最新文章

  1. WebRTC框架中的硬件加速
  2. Linux服务器查看占用IO较高的进程
  3. 量产加速!干线物流创新中心迎地平线入伙,嬴彻地平线达成战略合作
  4. 使用OneFlow完成基于U型网络的ISBI细胞分割任务
  5. 百分点宣布完成C轮融资2500万美元 将进一步开放云平台应用
  6. CF1101A Minimum Integer 模拟
  7. 华为服务器忘记管理密码怎么修改,忘记云服务器密码怎么修改
  8. 下1000个用户的云计算革命
  9. 影之刃3服务器维护,影之刃3手游2021年3月11日维护公告_影之刃3手游2021年3月11日更新了什么_玩游戏网...
  10. ajaxReturn 之前dump调试,导致$.ajax不能正常运行
  11. spring揭秘_被问到了! Spring 和 Spring Boot 之间到底有啥区别?
  12. PSPNet-tensorflow实现并训练数据
  13. Eureka常用配置
  14. 西安外国语大学计算机基础,西安外国语大学教务处.PDF
  15. 图像标注,三倍加速:谷歌AI新方案,数据民工的福音 | Demo可玩耍
  16. 大数据可视化技术的作用有哪些
  17. c语言程序基础设计题,《C语言程序设计基础》习题集(含答案)
  18. 为什么谐振时电抗为0_108kVA/108kV/27kV变频串联谐振试验装置
  19. Selenium2学习笔记一
  20. 最全的测试计划模板参考

热门文章

  1. 一个方便快捷gif在线水印制作(支持文字和图片)
  2. visio箭头尾部遮盖方框边线
  3. Ubuntu18.04的截图问题
  4. windows下将python自带的pip卸载了,怎么重新装pip
  5. 推荐几款Vue后台管理系统的框架,以便备用
  6. 用matlab求excel表中平均值,matlab如何将符合特定条件的数据导入excel并求出平均值...
  7. 单例模式中的懒汉模式和饿汉模式
  8. 数组和集合的互相转换
  9. 【推荐系统】特征值分解(谱分解)和奇异值分解(SVD),即在PCA上的应用
  10. redis配置文件中常用配置详解