密码学中矩阵相关计算
1 /**
2 *矩阵计算类
3 */
4 class Matrix{
5
6 /*
7 * 根据字符串解析密钥矩阵
8 * param key 密钥
9 * param rank 密钥矩阵的阶
10 * return 返回密钥矩阵
11 */
12 public static int[][] getKeyMatrix(String key,int rank){
13 key=key.trim();
14 String[] akey=key.split(" ");
15 int key_len=akey.length;
16 int[][] pk=new int[rank][rank]; //密钥矩阵
17
18 for(int i=0;i<key_len;i++){
19 String num=akey[i];
20 int row=i/rank,col=i%rank;
21 pk[row][col]=num.charAt(0)-'0'; //初始化第一位
22 for(int j=1;j<num.length();j++){
23 pk[row][col]=pk[row][col]*10+num.charAt(j)-'0';
24 }
25 }
26 return pk;
27 }
28
29 /* 矩阵a、b相乘,返回矩阵c */
30 public static int[][] Multi(int[][] a,int[][] b){
31 int row=a.length,
32 col=b[0].length,
33 rank=b.length;
34 int[][] c=new int[row][col];
35
36 for(int i=0;i<row;i++){
37 for(int j=0;j<col;j++){
38 c[i][j]=0;
39 for(int k=0;k<rank;k++){
40 c[i][j]+=a[i][k]*b[k][j];
41 }
42 c[i][j]%=modular;
43 }
44 }
45 return c;
46 }
47
48 /*
49 * 计算行列式的值
50 * param n 矩阵的阶
51 * param N 矩阵
52 */
53 public static int Det(int n,int[][] matrix) {
54 if (n == 1) {
55 return matrix[0][0];
56 }
57 int[][] matrix2 = new int[n - 1][n - 1];
58 int result = 0;
59 for (int i = 0; i < n; i++) { // 去除第0行第i列
60 for (int j = 0; j < n-1; j++) {
61 for (int p = 0; p < i; p++) { // 上移一行
62 matrix2[j][p] = matrix[j + 1][p];
63 }
64 for (int q = i + 1; q < n; q++) { //右下往左上移
65 matrix2[j][q - 1] = matrix[j + 1][q];
66 }
67 }
68 result = result + (int) Math.pow(-1, i + 1) * matrix[0][i]
69 * Det(n - 1, matrix2);
70 }
71 return result;
72 }
73
74 /*转置矩阵*/
75 public static int[][] tranMatrix(int n,int[][] matrix){
76 for(int i=0;i<n;i++)
77 for(int j=i+1;j<n;j++){
78 int tmp=matrix[i][j];
79 matrix[i][j]=matrix[j][i];
80 matrix[j][i]=tmp;
81 }
82 return matrix;
83 }
84
85 /*代数余子式*/
86 public static int getAdjunct(int n,int[][] matrix,int r,int c){
87 int[][] matrix2 = new int[n - 1][n - 1];
88 int result=0;
89 for(int i=0;i<r;i++){ &nbs
补充:综合编程 , 安全编程 ,