AES简单实现
来源:互联网 发布:阿里云 安装包 编辑:程序博客网 时间:2024/06/16 12:21
#include <iostream>#include <stdio.h>#include <iomanip>using namespace std;typedef unsigned char byte;//加法byte add(byte a,byte b){ return a^b;}//乘法byte multiply(byte a,byte b){ //16bit unsigned short int res, i, temp; res=0,temp=a; //乘 for(i=1; i<=0x80; i<<=1,temp<<=1) { if(i&b) { res^=temp; } } //取余 for(i=0x8000, temp=0x8d80; i>0x80; i>>=1, temp>>=1) if(i&res) res^=temp; return (byte)res;}//倍乘byte xtime(byte a){ if(a&0x80)//最高位为1 { //先左移然后和AES要求多项式对应的二进制 0xb1 取模 return (a<<1)^0x1b; } else { return a<<1; }}int main(){ int a,b; int num; while(1) { cout<<"please choose 1.add 2.multiply 3.xtime 4.esc"<<endl; cin>>num; switch(num) { case 1: cout<<"please enter two Hexadecimal numbers."<<endl; cin>>hex>>a; cin>>hex>>b; printf("%X\n",add(a,b)); break; case 2: cout<<"please enter two Hexadecimal numbers."<<endl; cin>>hex>>a; cin>>hex>>b; printf("%X\n",multiply(a,b)); break; case 3: cout<<"please enter a Hexadecimal number."<<endl; cin>>hex>>a; printf("%X\n",xtime(a)); break; //cout<<setiosflags(ios::uppercase)<<hex<<(xtime(a))<<endl; case 4: goto end; default: cout<<"enter the wrong number!"<<endl; } } end: return 0;}