编程实现有关SMS4的2个程序之——编程实现线性变换模块
生活随笔
收集整理的這篇文章主要介紹了
编程实现有关SMS4的2个程序之——编程实现线性变换模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** @author 康雨城 北京大學軟件與微電子學院* @time 2017/11/22*/import java.util.Scanner;public class Main {//定義輸入字的長度,根據題意,長度為8,也就是用8個16進制的數來表示一個字public static int WORD_STRING_LENGTH=8;//一個字占32bit,用32位二進制數來表示public static int BIT_LIST_LENGTH=4*WORD_STRING_LENGTH;//定義二進制與十進制對應的數組public static String[] list={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};public static void main(String[] args) {Scanner input =new Scanner(System.in);//String str=input.next();//獲取輸入的字String str1="1a2b3c4d";String result1=getResult(str1);System.out.println("輸入 "+str1+" 的線性變換結果為 "+result1);String str2="c1000000";String result2=getResult(str2);System.out.println("輸入 "+str2+" 的線性變換結果為 "+result2);String str3="80000000";String result3=getResult(str3);System.out.println("輸入 "+str3+" 的線性變換結果為 "+result3);}
/*
該方法實現線性變換模塊。要求:用戶輸入一個用16進制表示的數字(例如 1a2b3c4d)
程序輸出相應的用16進制表示的字*/private static String getResult(String str){int[] B=new int[BIT_LIST_LENGTH];//用于存儲輸入字轉為二進制的數int[] LB=new int[BIT_LIST_LENGTH];//用于存儲得到的二進制結果String LB_16="";//用于存儲得到的十六進制結果//進行一次循環,將輸入的十六進制的數轉化為二進制的數for(int i=0;i<WORD_STRING_LENGTH;i++){int k=Integer.valueOf(str.substring(i,i+1),16);for(int j=0;j<4;j++){B[4*i+j]=list[k].charAt(j)-48;}}//進行線性變換操作for(int p=0;p<BIT_LIST_LENGTH;p++){LB[p]=B[p]^B[(p+BIT_LIST_LENGTH-2)%BIT_LIST_LENGTH]^B[(p+BIT_LIST_LENGTH-10)%BIT_LIST_LENGTH]^B[(p+BIT_LIST_LENGTH-18)%BIT_LIST_LENGTH]^B[(p+BIT_LIST_LENGTH-24)%BIT_LIST_LENGTH];}//將二進制的數轉換為十六進制的數for(int x=0;x<WORD_STRING_LENGTH;x++){String temp="";for(int y=0;y<4;y++){temp+=LB[x*4+y];}LB_16+=Integer.toHexString(Integer.parseInt(temp, 2));}return LB_16;}
}
總結
以上是生活随笔為你收集整理的编程实现有关SMS4的2个程序之——编程实现线性变换模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程实现 4 条重写规则,可生成半法式和
- 下一篇: nova 之compute服务