Javascript实现Aes加密43819Word下载.docx
- 文档编号:13521174
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:5
- 大小:24.01KB
Javascript实现Aes加密43819Word下载.docx
《Javascript实现Aes加密43819Word下载.docx》由会员分享,可在线阅读,更多相关《Javascript实现Aes加密43819Word下载.docx(5页珍藏版)》请在冰豆网上搜索。
*//*
-see/PubsFIPS.html#197
*//*-----------------------------------------------
*/varAes={};
//Aesnamespace/**
*AESCipherfunction:
encrypt'
input'
statewithRijndaelalgorithm
*
appliesNrrounds(10/12/14)usingkeyschedulewfor'
addroundkey'
stage
*
*@param{Number[]}input16-byte(128-bit)inputstatearray
*@param{Number[][]}w
Keyscheduleas2Dbyte-array(Nr+1xNbbytes)
*@returns{Number[]}
Encryptedoutputstatearray
*/Aes.cipher=function(input,w){
//mainCipherfunction[§
5.1]
varNb=4;
//blocksize(inwords):
noofcolumnsinstate(fixedat4forAES)
varNr=w.length/Nb-1;
//noofrounds:
10/12/14for128/192/256-bitkeys
varstate=[[],[],[],[]];
//initialise4xNbbyte-array'
state'
withinput[§
3.4]
for(vari=0;
i<
4*Nb;
i++)state[i%4][Math.floor(i/4)]=input[i];
state=Aes.addRoundKey(state,w,0,Nb);
for(varround=1;
round<
Nr;
round++){
state=Aes.subBytes(state,Nb);
state=Aes.shiftRows(state,Nb);
state=Aes.mixColumns(state,Nb);
state=Aes.addRoundKey(state,w,round,Nb);
}
state=Aes.addRoundKey(state,w,Nr,Nb);
varoutput=newArray(4*Nb);
//convertstateto1-darraybeforereturning[§
i++)output[i]=state[i%4][Math.floor(i/4)];
returnoutput;
}/**
*PerformKeyExpansiontogenerateaKeySchedule
*@param{Number[]}keyKeyas16/24/32-bytearray
*@returns{Number[][]}Expandedkeyscheduleas2Dbyte-array(Nr+1xNbbytes)
*/Aes.keyExpansion=function(key){
//generateKeySchedule(byte-arrayNr+1xNb)fromKey[§
5.2]
//blocksize(inwords):
varNk=key.length/4
//keylength(inwords):
4/6/8for128/192/256-bitkeys
varNr=Nk+6;
varw=newArray(Nb*(Nr+1));
vartemp=newArray(4);
Nk;
i++){
varr=[key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]];
w[i]=r;
for(vari=Nk;
(Nb*(Nr+1));
w[i]=newArray(4);
for(vart=0;
t<
4;
t++)temp[t]=w[i-1][t];
if(i%Nk==0){
temp=Aes.subWord(Aes.rotWord(temp));
t++)temp[t]^=Aes.rCon[i/Nk][t];
}elseif(Nk>
6&
&
i%Nk==4){
temp=Aes.subWord(temp);
t++)w[i][t]=w[i-Nk][t]^temp[t];
returnw;
}/*
*----remainingroutinesareprivate,notcalledexternally----
*/
Aes.subBytes=function(s,Nb){
//applySBoxtostateS[§
for(varr=0;
r<
r++){
for(varc=0;
c<
Nb;
c++)s[r][c]=Aes.sBox[s[r][c]];
returns;
}Aes.shiftRows=function(s,Nb){
//shiftrowrofstateSleftbyrbytes[§
vart=newArray(4);
for(varr=1;
c++)t[c]=s[r][(c+r)%Nb];
//shiftintotempcopy
c++)s[r][c]=t[c];
//andcopyback
}
//notethatthiswillworkforNb=4,5,6,butnot7,8(always4forAES):
//see}Aes.mixColumns=function(s,Nb){
//combinebytesofeachcolofstateS[§
c++){
vara=newArray(4);
//'
a'
isacopyofthecurrentcolumnfrom'
s'
varb=newArray(4);
b'
isa•{02}inGF(2^8)
a[i]=s[i][c];
b[i]=s[i][c]&
0x80?
s[i][c]<
<
1^0x011b:
1;
//a[n]^b[n]isa•{03}inGF(2^8)
s[0][c]=b[0]^a[1]^b[1]^a[2]^a[3];
//2*a0+3*a1+a2+a3
s[1][c]=a[0]^b[1]^a[2]^b[2]^a[3];
//a0*2*a1+3*a2+a3
s[2][c]=a[0]^a[1]^b[2]^a[3]^b[3];
//a0+a1+2*a2+3*a3
s[3][c]=a[0]^b[0]^a[1]^a[2]^b[3];
//3*a0+a1+a2+2*a3
}Aes.addRoundKey=function(state,w,rnd,Nb){
//xorRoundKeyintostateS[§
c++)state[r][c]^=w[rnd*4+c][r];
returnstate;
}Aes.subWord=function(w){
//applySBoxto4-bytewordw
i++)w[i]=Aes.sBox[w[i]];
}Aes.rotWord=function(w){
//rotate4-bytewordwleftbyonebyte
vartmp=w[0];
3;
i++)w[i]=w[i+1];
w[3]=tmp;
}//sBoxispre-computedmultiplicativeinverseinGF(2^8)usedinsubBytesandkeyExpansion[§
Aes.sBox=
[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,0x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Javascript 实现 Aes 加密 43819