資源簡介
RSA非對稱加密是基于數字證書的加密體系中的一種加密方式。當發送信息時,發送方使用接收方的公鑰對數據加密,而接收方則使用自己的私鑰解密,這樣,信息就可以安全無誤地到達目的地了,即使被第三方截獲,由于沒有相應的私鑰,也無法進行解密。通過數字的手段保證加密過程是一個不可逆過程,即只有用私有密鑰才能解密。

代碼片段和文件信息
#include?“StdAfx.h“????//注意在此?#include?“Aes.h“不可以放在前面,否則出錯,
#include?“AesEncrypt.h“
CAesEncrypt::CAesEncrypt()
{
}
CAesEncrypt::~CAesEncrypt()
{
}
CAesEncrypt::CAesEncrypt(int?keysize?unsigned?char*?keyBytes)
{
SetNbNkNr(keysize);?????????????????????????//設置密鑰塊數,輪數?
memcpy(keykeyByteskeysize); //字符串拷貝函數,把keyBytes的keysize個字符復制到key中
KeyExpansion(); //密鑰擴展,必須提前做的初始化
}
void?CAesEncrypt::SetNbNkNr(int?keySize)
{
Nb?=?4;
if(keySize=Bits128)
{
Nk=4;????//4*4字節,128位密鑰,10輪加密
Nr=10;
}
else?if(keySize=Bits192)
{
Nk=6;????//6*4字節,192位密鑰,12輪加密
Nr=12;
}
else?if(keySize=Bits256)
{
Nk=8;????//8*4字節,256位密鑰,14輪加密
Nr=14;
}
}
void?CAesEncrypt::KeyExpansion()
{
memset(w016*15);
for(int?row=0;row {
w[4*row+0]?=??key[4*row];
w[4*row+1]?=??key[4*row+1];
w[4*row+2]?=??key[4*row+2];
w[4*row+3]?=??key[4*row+3];
}
byte*?temp?=?new?byte[4];
for(int?row=Nk;row<4*(Nr+1);row++)
{
temp[0]=w[4*row-4];?????//當前列的前一列??
temp[1]=w[4*row-3];
temp[2]=w[4*row-2];
temp[3]=w[4*row-1];
if(row%Nk==0)???????????//逢nk時,對當前列的前一列作特殊處理
{
temp=SubWord(RotWord(temp));???//先移位,再代換,最后和輪常量異或
temp[0]?=?(byte)(?(int)temp[0]?^?(int)?AesRcon[4*(row/Nk)+0]?);???
temp[1]?=?(byte)(?(int)temp[1]?^?(int)?AesRcon[4*(row/Nk)+1]?);
temp[2]?=?(byte)(?(int)temp[2]?^?(int)?AesRcon[4*(row/Nk)+2]?);
temp[3]?=?(byte)(?(int)temp[3]?^?(int)?AesRcon[4*(row/Nk)+3]?);
}
else?if?(?Nk?>?6?&&?(row?%?Nk?==?4)?)??//這個還沒有搞清楚
{
temp?=?SubWord(temp);
}
//?w[row]?=?w[row-Nk]?xor?temp
w[4*row+0]?=?(byte)?(?(int)?w[4*(row-Nk)+0]?^?(int)temp[0]?);
w[4*row+1]?=?(byte)?(?(int)?w[4*(row-Nk)+1]?^?(int)temp[1]?);
w[4*row+2]?=?(byte)?(?(int)?w[4*(row-Nk)+2]?^?(int)temp[2]?);
w[4*row+3]?=?(byte)?(?(int)?w[4*(row-Nk)+3]?^?(int)temp[3]?);
}??//?for?loop
}
//密鑰移位函數
unsigned?char*?CAesEncrypt::RotWord(unsigned?char*?word)
{
byte*?temp?=?new?byte[4];
temp[0]?=?word[1];
temp[1]?=?word[2];
temp[2]?=?word[3];
temp[3]?=?word[0];
return?temp;
}
//密鑰字代換函數
unsigned?char*?CAesEncrypt::SubWord(unsigned?char*?word)
{
byte*?temp?=?new?byte[4];
for(int?j=0;j<4;j++)
{
temp[j]?=?AesSbox[16*(word[j]?>>?4)+(word[j]?&?0x0f)];??//實際上也可以寫成AesSbox[[j]];因為兩者相等
}
return?temp;
}
//Aes加密函數
void?CAesEncrypt::Cipher(unsigned?char*?input?unsigned?char*?output)
{
memset(&State[0][0]016);
for(int?i=0;i<4*Nb;i++)????????????????????????//這里是先寫列后寫行的,即輸入是一列一列的進來的
{
State[i%4][i/4]=input[i]; //換成先寫行后寫列也是可以的,只要在輸出時也是這樣就可以了
}
AddRoundKey(0); //輪密鑰加
for?(int?round?=?1;?round?<=?(Nr?-?1);?round++)??//?main?round?loop
{
SubBytes(); //字節代換
ShiftRows(); //行移位
MixColumns(); //列混淆
AddRoundKey(round); //輪密鑰加
}??//?main?round?loop
SubBytes(); //字節代換
ShiftRows(); //行移位
AddRoundKey(Nr); //輪密鑰加
//?output?=?state
for?(int
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????20??2011-03-08?12:38??vs非對稱加密\Bin\Main\test.txt
?????文件????????885??2011-03-07?12:47??vs非對稱加密\Main.sln
????..A..H.?????33280??2011-04-03?22:58??vs非對稱加密\Main.suo
?????文件???????9056??2011-03-14?11:57??vs非對稱加密\Source\Main\AesEncrypt.cpp
?????文件???????5762??2011-03-14?11:57??vs非對稱加密\Source\Main\AesEncrypt.h
?????文件??????15764??2011-03-10?17:53??vs非對稱加密\Source\Main\BigInt.cpp
?????文件???????2457??2011-03-10?17:52??vs非對稱加密\Source\Main\BigInt.h
?????文件???????6453??2011-03-14?13:39??vs非對稱加密\Source\Main\Main.cpp
?????文件???????5091??2011-03-11?17:55??vs非對稱加密\Source\Main\Main.vcproj
?????文件???????1427??2011-03-14?13:40??vs非對稱加密\Source\Main\Main.vcproj.MHTX-0-130.HxUser.user
?????文件???????1427??2011-04-03?22:58??vs非對稱加密\Source\Main\Main.vcproj.YINMENG-9C43A76.隱夢.user
?????文件???????1165??2011-03-07?12:46??vs非對稱加密\Source\Main\ReadMe.txt
?????文件???????2068??2011-03-14?13:23??vs非對稱加密\Source\Main\RsaEncrypt.cpp
?????文件???????1734??2011-03-14?13:23??vs非對稱加密\Source\Main\RsaEncrypt.h
?????文件????????209??2011-03-07?12:46??vs非對稱加密\Source\Main\stdafx.cpp
?????文件????????399??2011-03-14?11:13??vs非對稱加密\Source\Main\stdafx.h
?????文件????????498??2011-03-07?12:46??vs非對稱加密\Source\Main\targetver.h
?????文件????????645??2011-03-08?20:02??vs非對稱加密\Source\RSA最簡單的32位版\Main.cpp
?????文件???????3218??2011-03-09?10:51??vs非對稱加密\Source\RSA最簡單的32位版\RsaEncrypt.cpp
?????文件???????1717??2011-03-09?09:43??vs非對稱加密\Source\RSA最簡單的32位版\RsaEncrypt.h
?????文件????????209??2011-03-07?12:46??vs非對稱加密\Source\RSA最簡單的32位版\stdafx.cpp
?????文件????????334??2011-03-08?13:48??vs非對稱加密\Source\RSA最簡單的32位版\stdafx.h
?????文件??????12239??2011-03-08?13:43??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\AesEncrypt.cpp
?????文件???????6391??2011-03-08?13:43??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\AesEncrypt.h
?????文件??????15764??2011-03-10?17:53??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\BigInt.cpp
?????文件???????2457??2011-03-10?17:52??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\BigInt.h
?????文件???????1956??2011-03-10?18:01??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\Main.cpp
?????文件???????5091??2011-03-10?16:18??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\Main.vcproj
?????文件???????1427??2011-03-10?18:12??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\Main.vcproj.MHTX-0-130.HxUser.user
?????文件???????1165??2011-03-07?12:46??vs非對稱加密\Source\初期版本RSA_128位\版本2011-3-11?AES+RSA1024之前最新Main\ReadMe.txt
............此處省略81個文件信息
- 上一篇:DDA直線插補
- 下一篇:struts-config.xm
l配置詳解.txt
評論
共有 條評論