锘??xml version="1.0" encoding="utf-8" standalone="yes"?> DES 鍗曞瘑閽ョ畻娉?鏄俊鎭殑鍙戦佹柟閲囩敤瀵嗛挜A榪涜鏁版嵁鍔犲瘑,淇℃伅鐨勬帴鏀舵柟閲囩敤鍚屼竴涓瘑閽榪涜鏁版嵁瑙e瘑. 鍗曞瘑閽ョ畻娉曟槸涓涓縐扮畻娉? 緙虹偣:鐢變簬閲囩敤鍚屼竴涓瘑閽ヨ繘琛屽姞瀵嗚В瀵?鍦ㄥ鐢ㄦ埛鐨勬儏鍐典笅,瀵嗛挜淇濈鐨勫畨鍏ㄦф槸涓涓棶棰? DSA錛圖igital Signature Algorithm錛夛細(xì)鏁板瓧絳懼悕綆楁硶錛屾槸涓縐嶆爣鍑嗙殑 DSS錛堟暟瀛楃鍚嶆爣鍑嗭級(jí)錛?span style="font-family: monospace;">
]]>
int GetRSA(RSA **RsaKeys)
{
*RsaKeys=RSA_generate_key(RSALEN,RSA_F4,NULL,NULL);
if(NULL==*RsaKeys)
return -1;
return 0 ;
}
//鍙栧緱縐侀挜
int GetPrivateKey(RSA *RsaKeys,RSA **Pvtkey)
{
*Pvtkey = RSAPrivateKey_dup(RsaKeys);
if(NULL==*Pvtkey)
return -1;
return 0;
}
//縐侀挜To鏁版嵁嫻?/span>
int PrivateKeyToData(RSA *Pvtkey,unsigned char* bufkey)
{
BIO* pBio = BIO_new(BIO_s_mem());
if (pBio == NULL) {
return -1;
}
memset(bufkey,'\0',RSALEN);
if( i2d_RSAPrivateKey_bio(pBio,Pvtkey) < 0 ) {
BIO_free(pBio);
return -1;
}
BIO_read(pBio,bufkey,RSALEN);
BIO_free(pBio);
return 0;
}
//鏁版嵁嫻乀o縐侀挜
int DataToPrivateKey(unsigned char* bufkey,RSA **Pvtkey)
{
BIO *pBio = BIO_new(BIO_s_mem());
if (pBio == NULL) {
return -1;
}
BIO_write(pBio,bufkey,RSALEN);
if( NULL == d2i_RSAPrivateKey_bio(pBio,Pvtkey)) {
BIO_free(pBio);
return -1;
}
BIO_free(pBio);
return 0;
}
//鍙栧緱鍏挜
int GetPublicKey(RSA *RsaKeys,RSA **Pubkey)
{
*Pubkey = RSAPublicKey_dup(RsaKeys);
if(NULL==*Pubkey)
return -1;
return 0;
}
//鍏挜To鏁版嵁嫻?/span>
int PublicKeyToData(RSA *Pubkey,unsigned char* bufkey)
{
BIO *pBio = BIO_new(BIO_s_mem());
if (pBio ==NULL) {
return -1;
}
memset(bufkey,'\0',RSALEN);
if(i2d_RSAPublicKey_bio(pBio,Pubkey) < 0) {
BIO_free(pBio);
return -1;
}
BIO_read(pBio,bufkey,RSALEN);
BIO_free(pBio);
return 0;
}
//鏁版嵁嫻乀o鍏挜
int DataToPublicKey(unsigned char*bufkey,RSA **Pubkey)
{
BIO * pBio=BIO_new(BIO_s_mem());
if (pBio ==NULL)
{
return -1;
}
BIO_write(pBio,bufkey,RSALEN);
if( d2i_RSAPublicKey_bio(pBio,Pubkey) < 0 ) {
BIO_free(pBio);
return -1;
}
BIO_free(pBio);
return 0;
}
/*鍏挜鍔犲瘑->縐侀挜瑙e瘑*/
int RSAPublicEncrypt(RSA *Publickey, char *From, char *To)
{
int len=0;
len = RSA_size(Publickey) -11;
if(-1 == (len=RSA_public_encrypt(len,(unsigned char *)From,(unsigned char *)To,Publickey,RSA_PKCS1_PADDING)) )
return -1;
return len;
}
/*縐侀挜瑙e瘑<-鍏挜鍔犲瘑*/
int RSAPrivateDecrypt(RSA *Privtekey, char *From, char *To)
{
if(-1 == (RSA_private_decrypt(RSALEN/8,(unsigned char *)From,(unsigned char *)To,Privtekey,RSA_PKCS1_PADDING)))
return -1;
return 0;
}
/*縐侀挜鍔犲瘑->鍏挜瑙e瘑*/
int RSAPrivateEncrypt(RSA *Privtekey, char *From, char *To)
{
int len = RSA_size(Privtekey)-11;
if(-1 == (len = RSA_private_encrypt(len,(unsigned char *)From,(unsigned char *)To,Privtekey,RSA_PKCS1_PADDING)))
return -1;
return len;
}
/*鍏挜瑙e瘑<-縐侀挜鍔犲瘑*/
int RSAPublicDecrypt(RSA *Publickey, char *From, char *To)
{
if(-1 == (RSA_public_decrypt(RSALEN/8,(unsigned char *)From,(unsigned char *)To,Publickey,RSA_PKCS1_PADDING)) )
return -1;
return 0;
}
//void DesEncrypt(char *Key,char *Msg, char *Result,int Length)
//{
// int n=0;
// DES_cblock desblock;
// DES_key_schedule schedule;
//
// DES_string_to_key(Key,&desblock);
// DES_set_key_checked( &desblock, &schedule );
//
// DES_cfb64_encrypt( (unsigned char *)Msg, (unsigned char *)Result,
// Length, &schedule, &desblock, &n, DES_ENCRYPT );
//
//}
//
//
//void DesDecrypt( char *Key, char *Msg, char *Result,int Length)
//{
//
// int n=0;
//
// DES_cblock desblock;
// DES_key_schedule schedule;
//
// DES_string_to_key(Key,&desblock);
// DES_set_key_checked( &desblock, &schedule );
//
// DES_cfb64_encrypt( (unsigned char *) Msg, (unsigned char *)Result,
// Length, &schedule, &desblock, &n, DES_DECRYPT );
//
//}
void DESGenerateKey(char *pKey)
{
int nLen=33;
int flag=0;
int i,k=0;
srand((unsigned)time(NULL));
for(i=0;i<nLen-1;i++)
{
flag=rand()%2;
if(flag)
pKey[k++]='A'+rand()%26;
else
pKey[k++]='a'+rand()%26;
}
pKey[k]='\0';
}
]]>
openssl閲囩敤C璇█浣滀負(fù)寮鍙戣璦錛岃繖浣垮緱瀹冨叿鏈変紭縐鐨勮法騫沖彴鎬ц兘銆俹penssl鏀寔Linux銆乁NIX銆亀indows銆丮ac絳夊鉤鍙般俹penssl鐩墠鏈鏂扮殑鐗堟湰鏄痮penssl-1.0.0d.
瀹樻柟緗戝潃錛歨ttp://www.openssl.org/
linux涓嬬殑瀹夎錛?br />wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz
tar xvzf openssl-1.0.0d.tar.gz
cd openssl-1.0.0d
濡傛灉闇瑕亃lib鍘嬬緝妯″潡鐨勮瘽錛岃繕闇瑕佸厛瀹夎zlib
鐒跺悗錛?br />./config --prefix=/usr/local/ssl shared zlib-dynamic
涓嶉渶瑕佸氨鐩存帴鐢細(xì)
./config --prefix=/usr/local/ssl shared no-zlib
鏇村璇︾粏甯姪璇瘋繍琛?br />./config --help
鐒跺悗錛?br />make && make install
娌¢棶棰樼殑璇濆氨浼?xì)涓璺窇涓嬪幓錛屽彲浠ュ幓娉℃澂鍜栧暋錛屾場涓錛屽洖鏉ュ樊涓嶅灝卞ソ浜嗐?br />
ARM騫沖彴鐨勪氦鍙夌紪璇戝畨瑁咃細(xì)
緙栬瘧錛歰penssl
./config no-asm no-zlib --prefix=/arm/openssl os/compiler:arm-linux-gcc
淇敼錛?br />CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
濡傛灉瀛樺湪 -march=pentium 灝卞幓鎺夈?br />
windows涓嬬殑瀹夎錛?br />OpenSSL鍦╓indows涓嬬殑緙栬瘧瀹夎
瑙e帇openssl-1.0.0d.tar.gz浠ュ悗錛?nbsp;鍦ㄥ叾鐩綍涓嬪彲浠ュ彂鐜版湁涓狪NSTALL.W32鏂囦歡錛岃繖涓枃浠跺氨鏄湪windows涓嬬殑瀹夎璇存槑銆?br />1.瀹夎perl,perl鍙互浠巋ttp://www.activestate.com/ActivePerl涓嬭澆銆?br />2.瀹夎緙栬瘧鍣紙浠繪剰涓涓兘鍙互錛?/span>,鎴戝湪Visual C++ 2005瀹夎鎴愬姛浜嗭紝VC2008瀹夎澶辮觸浜?br />
3.濡傛灉閫氳繃姹囩紪鐨勬柟寮忕紪璇戯紝闇瑕佸畨瑁呮眹緙栬璦緙栬瘧鍣ㄣ侻ASM NASM閮藉彲浠ャ傚鏋滈熷害瑕佹眰涓嶉珮錛屽彲浠ヤ笉鐢ㄦ眹緙栫殑鏂瑰紡緙栬瘧錛屽嵆涓嶉渶瑕佸畨瑁呫侻ASM涓鑸敱VC++鑷甫錛學(xué)indows NT 4.0 DDK a鍜學(xué)indows 98 DDK涔熷甫鏈塎ASM銆傛妸XXXXXml.exe鍜孹XXXXml.err鏂囦歡錛屾彁鍙栧嚭鏉ワ紝鍛藉悕涓簃l.exe鍜宮l.err錛屽茍鎶婁粬浠斁鍒癙ATH璺緞涓嵆鍙?br />
NASM鍙互鍏嶈垂鑾峰彇錛屽緢澶氬湴鏂歸兘鍙互涓嬭澆鍒幫紝濡俬ttp://www.kernel.org/pub/software/devel/nasm/binaries/win32/
nasmw.exe鏂囦歡涔熼渶瑕佹斁鍒癙ATH璺緞涓?br />
4.鎵撳紑涓涓狣OS紿楀彛錛岃緭鍏ワ細(xì)perl Configure VC-WIN32
5.濡傛灉浣跨敤MASM錛屾帴鐫杈撳叆錛歮s\do_masm
濡傛灉浣跨敤NASM錛屾帴鐫杈撳叆錛歮s\do_nasm
濡傛灉涓嶄嬌鐢ㄦ眹緙栬璦緙栬瘧鍣紝杈撳叆:ms\do_ms
鎴戠敤鐨勬槸:ms\do_ms
6.鍦―OS紿楀彛涓帴鐫杈撳叆錛歯make -f ms\ntdll.mak
濡傛灉娌℃湁閿欒鐨勮瘽錛岀紪璇戝氨閫氳繃浜嗭紝鍦╫ut32dll鐩綍涓嬮潰灝卞彲浠ョ湅鍒幫紝鐢熸垚鐨刣ll鏂囦歡鍜屽彲鎵ц鏂囦歡浜嗐傛妸浠栦滑鏀懼埌錛孭ATH鐜鍙橀噺瀵瑰簲鐨勪竴涓洰褰曢噷灝卞彲浠ヤ簡銆?br />
涓嬩竴鑺傝openssl鐨勪竴浜涘熀紜鐭ヨ瘑
]]>
http://www.cryptopp.com/
涓嬭澆,鎴戜笅鐨勭増鏈槸:
Crypto++® Library 5.6.1
瑙e帇鍚?鐢╒S2008鏈?涓伐紼?
cryptest
cryptlib
cryptopp
dlltest
緙栬瘧 cryptlib 宸ョ▼
,涔栦箹,
緙栬瘧鍑烘潵鐨刢ryptlib.lib
鏈?0澶歁,
涓嶇浜?緇х畫.
灝哻ryptlib.lib搴撳姞鍏ュ埌宸ョ▼涓?
緙栧啓hello world
using namespace std;
#include <cryptopp/aes.h>
using namespace CryptoPP;
int main()
{
cout << "hello crypto++" << endl;
cout << "Aes block size is " << AES::BLOCKSIZE << endl;
return 0;
}
闄勪笂涓涓敤鎴鋒寚鍗?
http://m.shnenglu.com/Files/aaxron/CryptoPPGuide.7z
]]>
閲囩敤鍗曢挜瀵嗙爜緋葷粺鐨勫姞瀵嗘柟娉曪紝鍚屼竴涓瘑閽ュ彲浠ュ悓鏃剁敤浣滀俊鎭殑鍔犲瘑鍜岃В瀵嗭紝榪欑鍔犲瘑鏂規(guī)硶縐頒負(fù)瀵圭О鍔犲瘑錛屼篃縐頒負(fù)鍗曞瘑閽ュ姞瀵嗐?銆銆
闇瑕佸鍔犲瘑鍜岃В瀵嗕嬌鐢ㄧ浉鍚屽瘑閽ョ殑鍔犲瘑綆楁硶銆傜敱浜庡叾閫熷害錛屽縐版у姞瀵嗛氬父鍦ㄦ秷鎭彂閫佹柟闇瑕佸姞瀵嗗ぇ閲忔暟鎹椂浣跨敤銆傚縐版у姞瀵嗕篃縐頒負(fù)瀵嗛挜鍔犲瘑銆?銆銆
鎵璋撳縐幫紝灝辨槸閲囩敤榪欑鍔犲瘑鏂規(guī)硶鐨勫弻鏂逛嬌鐢ㄦ柟寮忕敤鍚屾牱鐨勫瘑閽ヨ繘琛屽姞瀵嗗拰瑙e瘑銆傚瘑閽ュ疄闄呬笂鏄竴縐嶇畻娉曪紝閫氫俊鍙戦佹柟浣跨敤榪欑綆楁硶鍔犲瘑鏁版嵁錛屾帴鏀舵柟鍐嶄互鍚屾牱鐨勭畻娉曡В瀵嗘暟鎹?銆銆
鍥犳瀵圭О寮忓姞瀵嗘湰韜笉鏄畨鍏ㄧ殑銆?
銆銆
甯哥敤鐨勫縐板姞瀵嗙畻娉曟湁錛?/span>
DES錛圖ata Encryption Standard錛夛細(xì)鏁版嵁鍔犲瘑鏍囧噯錛岄熷害杈冨揩錛岄傜敤浜庡姞瀵嗗ぇ閲忔暟鎹殑鍦哄悎銆?br _extended="true">
DES銆両DEA銆丷C2銆丷C4銆丼KIPJACK綆楁硶絳?/span>
3DES錛圱riple DES錛夛細(xì)鏄熀浜嶥ES錛屽涓鍧楁暟鎹敤涓変釜涓嶅悓鐨勫瘑閽ヨ繘琛屼笁嬈″姞瀵嗭紝寮哄害鏇撮珮銆?br _extended="true">
AES錛圓dvanced Encryption Standard錛夛細(xì)楂樼駭鍔犲瘑鏍囧噯錛屾槸涓嬩竴浠g殑鍔犲瘑綆楁硶鏍囧噯錛岄熷害蹇紝瀹夊叏綰у埆楂橈紱
RC4錛屼篃鏄負(fù) RSA Data Security, Inc. 寮鍙戠殑瀵嗙爜緋葷粺鐨勫晢鏍囧悕縐般?br>
DES銆?DES銆丅lowfish銆両DEA銆丷C4銆丷C5銆丷C6鍜?/font>AES
鐢ㄥ崟閽ュ瘑鐮佺郴緇熺殑鍔犲瘑鏂規(guī)硶錛屽悓涓涓瘑閽ュ彲浠ュ悓鏃剁敤浣滀俊鎭殑鍔犲瘑鍜岃В瀵嗭紝榪欑鍔犲瘑鏂規(guī)硶縐頒負(fù)瀵圭О鍔犲瘑錛屼篃縐頒負(fù)鍗曞瘑閽ュ姞瀵嗐?/span>
瀵圭О鍔犲瘑綆楁硶
瀵圭О鍔犲瘑綆楁硶鏄簲鐢ㄨ緝鏃╃殑鍔犲瘑綆楁硶錛屾妧鏈垚鐔熴傚湪瀵圭О鍔犲瘑綆楁硶涓紝鏁版嵁鍙戜俊鏂瑰皢鏄庢枃錛堝師濮嬫暟鎹級(jí)鍜屽姞瀵嗗瘑閽ヤ竴璧風(fēng)粡榪囩壒孌婂姞瀵嗙畻娉曞鐞嗗悗錛屼嬌鍏跺彉鎴愬鏉傜殑鍔犲瘑瀵嗘枃鍙戦佸嚭鍘匯傛敹淇℃柟鏀跺埌瀵嗘枃鍚庯紝鑻ユ兂瑙h鍘熸枃錛屽垯闇瑕佷嬌鐢ㄥ姞瀵嗙敤榪囩殑瀵嗛挜鍙?qiáng)鐩稿悓绠楁硶鐨勯嗙畻娉曞瀵嗘枃榪涜瑙e瘑錛屾墠鑳戒嬌鍏舵仮澶嶆垚鍙鏄庢枃銆傚湪瀵圭О鍔犲瘑綆楁硶涓紝浣跨敤鐨勫瘑閽ュ彧鏈変竴涓紝鍙戞敹淇″弻鏂歸兘浣跨敤榪欎釜瀵嗛挜瀵規(guī)暟鎹繘琛屽姞瀵嗗拰瑙e瘑錛岃繖灝辮姹傝В瀵嗘柟浜嬪厛蹇呴』鐭ラ亾鍔犲瘑瀵嗛挜銆傚縐板姞瀵嗙畻娉曠殑鐗圭偣鏄畻娉曞叕寮銆佽綆楅噺灝忋佸姞瀵嗛熷害蹇佸姞瀵嗘晥鐜囬珮銆備笉瓚充箣澶勬槸錛屼氦鏄撳弻鏂歸兘浣跨敤鍚屾牱閽ュ寵錛屽畨鍏ㄦу緱涓嶅埌淇濊瘉銆傛澶栵紝姣忓鐢ㄦ埛姣忔浣跨敤瀵圭О鍔犲瘑綆楁硶鏃訛紝閮介渶瑕佷嬌鐢ㄥ叾浠栦漢涓嶇煡閬撶殑鎯熶竴閽ュ寵錛岃繖浼?xì)鋴慑緱鍙戞敹淇″弻鏂规墍鎷ユ湁鐨勯挜鍖欐暟閲忔垚鍑犱綍綰ф暟澧為暱錛屽瘑閽ョ鐞嗘垚涓虹敤鎴風(fēng)殑璐熸媴銆傚縐板姞瀵嗙畻娉曞湪鍒嗗竷寮忕綉緇滅郴緇熶笂浣跨敤杈冧負(fù)鍥伴毦錛屼富瑕佹槸鍥犱負(fù)瀵嗛挜綆$悊鍥伴毦錛屼嬌鐢ㄦ垚鏈緝楂樸傚湪璁$畻鏈轟笓緗戠郴緇熶腑騫挎硾浣跨敤鐨勫縐板姞瀵嗙畻娉曟湁DES銆両DEA鍜孉ES銆?/span>
浼犵粺鐨凞ES鐢變簬鍙湁56浣嶇殑瀵嗛挜錛屽洜姝ゅ凡緇忎笉閫傚簲褰撲粖鍒嗗竷寮忓紑鏀劇綉緇滃鏁版嵁鍔犲瘑瀹夊叏鎬х殑瑕佹眰銆?997騫碦SA鏁版嵁瀹夊叏鍏徃鍙戣搗浜嗕竴欏?#8220;DES鎸戞垬璧?#8221;鐨勬椿鍔紝蹇楁効鑰呭洓嬈″垎鍒敤鍥涗釜鏈堛?1澶┿?6涓皬鏃跺拰22涓皬鏃剁牬瑙d簡鍏剁敤56浣嶅瘑閽ES綆楁硶鍔犲瘑鐨勫瘑鏂囥傚嵆DES鍔犲瘑綆楁硶鍦ㄨ綆楁満閫熷害鎻愬崌鍚庣殑浠婂ぉ琚涓烘槸涓嶅畨鍏ㄧ殑銆?/span>
AES鏄編鍥借仈閭︽斂搴滈噰鐢ㄧ殑鍟嗕笟鍙?qiáng)鏀垮簻鏁版嵁鍔犲瘑鏍囧噯锛岄璁畣鍦ㄦ湭鏉ュ嚑鍗侐q撮噷浠f浛DES鍦ㄥ悇涓鍩熶腑寰楀埌騫挎硾搴旂敤銆侫ES鎻愪緵128浣嶅瘑閽ワ紝鍥犳錛?28浣岮ES鐨勫姞瀵嗗己搴︽槸56浣岲ES鍔犲瘑寮哄害鐨?021鍊嶈繕澶氥傚亣璁懼彲浠ュ埗閫犱竴閮ㄥ彲浠ュ湪1縐掑唴鐮磋ВDES瀵嗙爜鐨勬満鍣紝閭d箞浣跨敤榪欏彴鏈哄櫒鐮磋В涓涓?28浣岮ES瀵嗙爜闇瑕佸ぇ綰?49浜夸竾騫寸殑鏃墮棿銆傦紙鏇存繁涓姝ユ瘮杈冭岃█錛屽畤瀹欎竴鑸璁や負(fù)瀛樺湪浜嗚繕涓嶅埌200浜垮勾錛夊洜姝ゅ彲浠ラ璁★紝緹庡浗鍥藉鏍囧噯灞鍊″鐨凙ES鍗沖皢浣滀負(fù)鏂版爣鍑嗗彇浠ES銆?/span>
闈炲縐板姞瀵?/span>
銆銆1976騫達(dá)紝緹庡浗瀛﹁匘ime鍜孒enman涓鴻В鍐充俊鎭叕寮浼犻佸拰瀵嗛挜綆$悊闂錛屾彁鍑轟竴縐嶆柊鐨勫瘑閽ヤ氦鎹㈠崗璁紝鍏佽鍦ㄤ笉瀹夊叏鐨勫獟浣撲笂鐨勯氳鍙屾柟浜ゆ崲淇℃伅錛屽畨鍏ㄥ湴杈炬垚涓鑷寸殑瀵嗛挜錛岃繖灝辨槸“鍏紑瀵嗛挜緋葷粺”銆傜浉瀵逛簬“瀵圭О鍔犲瘑綆楁硶”榪欑鏂規(guī)硶涔熷彨鍋?#8220;闈炲縐板姞瀵嗙畻娉?#8221;銆?銆銆涓庡縐板姞瀵嗙畻娉曚笉鍚岋紝闈炲縐板姞瀵嗙畻娉曢渶瑕佷袱涓瘑閽ワ細(xì)鍏紑瀵嗛挜錛坧ublickey錛夊拰縐佹湁瀵嗛挜錛坧rivatekey錛夈傚叕寮瀵嗛挜涓庣鏈夊瘑閽ユ槸涓瀵癸紝濡傛灉鐢ㄥ叕寮瀵嗛挜瀵規(guī)暟鎹繘琛屽姞瀵嗭紝鍙湁鐢ㄥ搴旂殑縐佹湁瀵嗛挜鎵嶈兘瑙e瘑錛涘鏋滅敤縐佹湁瀵嗛挜瀵規(guī)暟鎹繘琛屽姞瀵嗭紝閭d箞鍙湁鐢ㄥ搴旂殑鍏紑瀵嗛挜鎵嶈兘瑙e瘑銆傚洜涓哄姞瀵嗗拰瑙e瘑浣跨敤鐨勬槸涓や釜涓嶅悓鐨勫瘑閽ワ紝鎵浠ヨ繖縐嶇畻娉曞彨浣滈潪瀵圭О鍔犲瘑綆楁硶銆?/span>
鐗規(guī)?/span>
銆銆闈炲縐板姞瀵嗙畻娉曞疄鐜版満瀵嗕俊鎭氦鎹㈢殑鍩烘湰榪囩▼鏄細(xì)鐢叉柟鐢熸垚涓瀵瑰瘑閽ュ茍灝嗗叾涓殑涓鎶婁綔涓哄叕鐢ㄥ瘑閽ュ悜鍏跺畠鏂瑰叕寮錛涘緱鍒拌鍏敤瀵嗛挜鐨勪箼鏂逛嬌鐢ㄨ瀵嗛挜瀵規(guī)満瀵嗕俊鎭繘琛屽姞瀵嗗悗鍐嶅彂閫佺粰鐢叉柟錛涚敳鏂瑰啀鐢ㄨ嚜宸變繚瀛樼殑鍙︿竴鎶婁笓鐢ㄥ瘑閽ュ鍔犲瘑鍚庣殑淇℃伅榪涜瑙e瘑銆傜敳鏂瑰彧鑳界敤鍏朵笓鐢ㄥ瘑閽ヨВ瀵嗙敱鍏跺叕鐢ㄥ瘑閽ュ姞瀵嗗悗鐨勪換浣曚俊鎭?銆銆闈炲縐板姞瀵嗙畻娉曠殑淇濆瘑鎬ф瘮杈冨ソ錛屽畠娑堥櫎浜嗘渶緇堢敤鎴蜂氦鎹㈠瘑閽ョ殑闇瑕侊紝浣嗗姞瀵嗗拰瑙e瘑鑺辮垂鏃墮棿闀褲侀熷害鎱紝瀹冧笉閫傚悎浜庡鏂囦歡鍔犲瘑鑰屽彧閫傜敤浜庡灝戦噺鏁版嵁榪涜鍔犲瘑銆?銆銆緇忓吀鐨勯潪瀵圭О鍔犲瘑綆楁硶濡俁SA綆楁硶絳夊畨鍏ㄦч兘鐩稿綋楂? 銆銆闈炲縐板姞瀵嗙殑鍏稿瀷搴旂敤鏄暟瀛楃鍚嶃?銆銆閲囩敤鍙岄挜瀵嗙爜緋葷粺鐨勫姞瀵嗘柟娉曪紝鍦ㄤ竴涓繃紼嬩腑浣跨敤涓や釜瀵嗛挜錛屼竴涓敤浜庡姞瀵嗭紝鍙︿竴涓敤浜庤В瀵嗭紝榪欑鍔犲瘑鏂規(guī)硶縐頒負(fù)闈炲縐板姞瀵嗭紝涔熺О涓哄叕閽ュ姞瀵嗭紝鍥犱負(fù)鍏朵腑涓涓瘑閽ユ槸鍏紑鐨勶紙鍙︿竴涓垯闇瑕佷繚瀵嗭級(jí)銆?/span>
涓嶅縐板姞瀵嗙畻娉?/span>
涓嶅縐板姞瀵嗙畻娉曚嬌鐢ㄤ袱鎶婂畬鍏ㄤ笉鍚屼絾鍙堟槸瀹屽叏鍖歸厤鐨勪竴瀵歸挜鍖欌斿叕閽ュ拰縐侀挜銆傚湪浣跨敤涓嶅縐板姞瀵嗙畻娉曞姞瀵嗘枃浠舵椂錛屽彧鏈変嬌鐢ㄥ尮閰嶇殑涓瀵瑰叕閽ュ拰縐侀挜錛屾墠鑳藉畬鎴愬鏄庢枃鐨勫姞瀵嗗拰瑙e瘑榪囩▼銆傚姞瀵嗘槑鏂囨椂閲囩敤鍏挜鍔犲瘑錛岃В瀵嗗瘑鏂囨椂浣跨敤縐侀挜鎵嶈兘瀹屾垚錛岃屼笖鍙戜俊鏂癸紙鍔犲瘑鑰咃級(jí)鐭ラ亾鏀朵俊鏂圭殑鍏挜錛屽彧鏈夋敹淇℃柟錛堣В瀵嗚咃級(jí)鎵嶆槸鍞竴鐭ラ亾鑷繁縐侀挜鐨勪漢銆備笉瀵圭О鍔犲瘑綆楁硶鐨勫熀鏈師鐞嗘槸錛屽鏋滃彂淇℃柟鎯沖彂閫佸彧鏈夋敹淇℃柟鎵嶈兘瑙h鐨勫姞瀵嗕俊鎭紝鍙戜俊鏂瑰繀欏婚鍏堢煡閬撴敹淇℃柟鐨勫叕閽ワ紝鐒跺悗鍒╃敤鏀朵俊鏂圭殑鍏挜鏉ュ姞瀵嗗師鏂囷紱鏀朵俊鏂規(guī)敹鍒板姞瀵嗗瘑鏂囧悗錛屼嬌鐢ㄨ嚜宸辯殑縐侀挜鎵嶈兘瑙e瘑瀵嗘枃銆傛樉鐒?dòng)灱岄噰鐢ㄤ笉瀵箍U板姞瀵嗙畻娉曪紝鏀跺彂淇″弻鏂瑰湪閫氫俊涔嬪墠錛屾敹淇℃柟蹇呴』灝嗚嚜宸辨棭宸查殢鏈虹敓鎴愮殑鍏挜閫佺粰鍙戜俊鏂癸紝鑰岃嚜宸變繚鐣欑閽ャ傜敱浜庝笉瀵圭О綆楁硶鎷ユ湁涓や釜瀵嗛挜錛屽洜鑰岀壒鍒傜敤浜庡垎甯冨紡緋葷粺涓殑鏁版嵁鍔犲瘑銆傚箍娉涘簲鐢ㄧ殑涓嶅縐板姞瀵嗙畻娉曟湁RSA綆楁硶鍜岀編鍥藉浗瀹舵爣鍑嗗眬鎻愬嚭鐨凞SA銆備互涓嶅縐板姞瀵嗙畻娉曚負(fù)鍩虹鐨勫姞瀵嗘妧鏈簲鐢ㄩ潪甯稿箍娉涖?/span>
RSA錛圧ivest Shamir Adlemen錛屼竴縐嶅洜鐗圭綉鍔犲瘑鍜岃璇佷綋緋伙級(jí)錛氱敱 RSA 鍏徃鍙戞槑錛屾槸涓涓敮鎸佸彉闀垮瘑閽ョ殑鍏叡瀵嗛挜綆楁硶錛岄渶瑕佸姞瀵嗙殑鏂囦歡鍧楃殑闀垮害涔熸槸鍙彉鐨勶紱
ECC錛圗lliptic Curves Cryptography錛夛細(xì)妞渾鏇茬嚎瀵嗙爜緙栫爜瀛︺?/p>
DSA
鎵璋撴暟瀛楃鍚嶆槸鎸囧彂閫佹柟浠庡彂閫佹姤鏂囦腑鎶藉彇鐗瑰緛鏁版嵁(縐頒負(fù)鏁板瓧鎸囩汗鎴栨憳瑕?,鐒跺悗鐢ㄥ彂閫佹柟鐨勭閽ュ鏁板瓧鎸囩汗浣跨敤鍔犲瘑綆楁硶榪涜綆楁硶鎿嶄綔,鎺ュ彈鏂逛嬌鐢ㄥ彂閫佹柟宸茬粡鍏紑鐨勫叕閽ヨВ瀵嗗茍楠岃瘉鎶ユ枃.
鏁板瓧絳懼悕鐢ㄦ埛楠岃瘉鍙戦佹柟韜喚鎴栬呭彂閫佹柟淇℃伅鐨勫畬鏁存?/p>
MD5/SHA MessageDigest鏄竴涓暟鎹殑鏁板瓧鎸囩汗.鍗沖涓涓換鎰忛暱搴︾殑鏁版嵁榪涜璁$畻,浜х敓涓涓敮涓鎸囩汗鍙? A) 涓や釜涓嶅悓鐨勬暟鎹?闅句互鐢熸垚鐩稿悓鐨勬寚綰瑰彿 B) 瀵逛簬鎸囧畾鐨勬寚綰瑰彿,闅句互閫嗗悜璁$畻鍑哄師濮嬫暟鎹?/p>
涓枃鍚嶇О錛氬瘑閽ュ姞瀵?
鑻辨枃鍚嶇О錛歴ecret key encryption
瀹氫箟錛氬彂閫佸拰鎺ユ敹鏁版嵁鐨勫弻鏂癸紝浣跨敤鐩稿悓鐨勬垨瀵圭О鐨勫瘑閽ュ鏄庢枃榪涜鍔犲瘑瑙e瘑榪愮畻鐨勫姞瀵嗘柟娉曘?/span>
鍏挜鍔犲瘑
涓枃鍚嶇О錛氬叕閽ュ姞瀵?
鑻辨枃鍚嶇О錛歱ublic key encryption
瀹氫箟錛氱敱瀵瑰簲鐨勪竴瀵瑰敮涓鎬у瘑閽?鍗沖叕寮瀵嗛挜鍜岀鏈夊瘑閽?緇勬垚鐨勫姞瀵嗘柟娉曘傚畠瑙e喅浜嗗瘑閽ョ殑鍙戝竷鍜岀鐞嗛棶棰橈紝鏄洰鍓嶅晢涓氬瘑鐮佺殑鏍稿績銆?/span>
涓枃鍚嶇О錛氭暟瀛楃鍚?
鑻辨枃鍚嶇О錛歞igital signature
瀹氫箟錛氫互鐢?shù)瀛愬舰寮忓瓨鍦ㄤ簬鏁版嵁淇℃伅涔嬩腑鐨勫Q屾垨浣滀負(fù)鍏墮檮浠剁殑鎴栭昏緫涓婁笌涔嬫湁鑱旂郴鐨勬暟鎹紝鍙敤浜庤鯨鍒暟鎹緗蹭漢鐨勮韓浠斤紝騫惰〃鏄庣緗蹭漢瀵規(guī)暟鎹俊鎭腑鍖呭惈鐨勪俊鎭殑璁ゅ彲銆?/span>
鏁板瓧絳懼悕錛堝張縐板叕閽ユ暟瀛楃鍚嶃佺數(shù)瀛愮绔狅級(jí)鏄竴縐嶇被浼煎啓鍦ㄧ焊涓婄殑鏅氱殑鐗╃悊絳懼悕錛屼絾鏄嬌鐢ㄤ簡鍏挜鍔犲瘑棰嗗煙鐨勬妧鏈疄鐜幫紝鐢ㄤ簬閴村埆鏁板瓧淇℃伅鐨勬柟娉曘備竴濂楁暟瀛楃鍚嶉氬父瀹氫箟涓ょ浜掕ˉ鐨勮繍綆楋紝涓涓敤浜庣鍚嶏紝鍙︿竴涓敤浜庨獙璇併?/span>
Hash綆楁硶
Hash綆楁硶鐗瑰埆鐨勫湴鏂瑰湪浜庡畠鏄竴縐嶅崟鍚戠畻娉曪紝鐢ㄦ埛鍙互閫氳繃Hash綆楁硶瀵圭洰鏍囦俊鎭敓鎴愪竴孌電壒瀹氶暱搴︾殑鍞竴鐨凥ash鍊鹼紝鍗翠笉鑳介氳繃榪欎釜Hash鍊奸噸鏂拌幏寰楃洰鏍囦俊鎭傚洜姝ash綆楁硶甯哥敤鍦ㄤ笉鍙繕鍘熺殑瀵嗙爜瀛樺偍銆佷俊鎭畬鏁存ф牎楠岀瓑銆?
甯歌鐨凥ash綆楁硶鏈塎D2銆丮D4銆丮D5銆丠AVAL銆丼HA
MessageDigest鐨勭壒鎬?
鍏朵粬浠嬬粛:
PGP錛圥retty Good Privacy錛夋妧鏈?
PGP鎶鏈槸涓涓熀浜庝笉瀵圭О鍔犲瘑綆楁硶RSA鍏挜浣撶郴鐨勯偖浠跺姞瀵嗘妧鏈紝涔熸槸涓縐嶆搷浣滅畝鍗曘佷嬌鐢ㄦ柟渚褲佹櫘鍙?qiáng)绋嬪害杈冮珮鐨勫姞瀵嗚蒋錃g銆侾GP鎶鏈笉浣嗗彲浠ュ鐢?shù)瀛愰偖錃g鍔犲瘑錛岄槻姝㈤潪鎺堟潈鑰呴槄璇諱俊浠訛紱榪樿兘瀵圭數(shù)瀛愰偖浠墮檮鍔犳暟瀛楃鍚嶏紝浣挎敹淇′漢鑳芥槑紜簡瑙e彂淇′漢鐨勭湡瀹炶韓浠斤紱涔熷彲浠ュ湪涓嶉渶瑕侀氳繃浠諱綍淇濆瘑娓犻亾浼犻掑瘑閽ョ殑鎯呭喌涓嬶紝浣夸漢浠畨鍏ㄥ湴榪涜淇濆瘑閫氫俊銆侾GP鎶鏈垱閫犳у湴鎶奟SA涓嶅縐板姞瀵嗙畻娉曠殑鏂逛究鎬у拰浼犵粺鍔犲瘑浣撶郴緇撳悎璧鋒潵錛屽湪鏁板瓧絳懼悕鍜屽瘑閽ヨ璇佺鐞嗘満鍒舵柟闈㈤噰鐢ㄤ簡鏃犵紳緇撳悎鐨勫閥濡欒璁★紝浣垮叾鍑犱箮鎴愪負(fù)鏈涓烘祦琛岀殑鍏挜鍔犲瘑杞歡鍖呫?
鏁板瓧絳懼悕錛圖igital Signature錛夋妧鏈?
鏁板瓧絳懼悕鎶鏈槸涓嶅縐板姞瀵嗙畻娉曠殑鍏稿瀷搴旂敤銆傛暟瀛楃鍚嶇殑搴旂敤榪囩▼鏄紝鏁版嵁婧愬彂閫佹柟浣跨敤鑷繁鐨勭閽ュ鏁版嵁鏍¢獙鍜屾垨鍏朵粬涓庢暟鎹唴瀹規(guī)湁鍏崇殑鍙橀噺榪涜鍔犲瘑澶勭悊錛屽畬鎴愬鏁版嵁鐨勫悎娉?#8220;絳懼悕”錛屾暟鎹帴鏀舵柟鍒欏埄鐢ㄥ鏂圭殑鍏挜鏉ヨВ璇繪敹鍒扮殑“鏁板瓧絳懼悕”錛屽茍灝嗚В璇葷粨鏋滅敤浜庡鏁版嵁瀹屾暣鎬х殑媯(gè)楠岋紝浠ョ‘璁ょ鍚嶇殑鍚堟硶鎬с傛暟瀛楃鍚嶆妧鏈槸鍦ㄧ綉緇滅郴緇熻櫄鎷熺幆澧冧腑紜韜喚鐨勯噸瑕佹妧鏈紝瀹屽叏鍙互浠f浛鐜板疄榪囩▼涓殑“浜茬瑪絳懼瓧”錛屽湪鎶鏈拰娉曞緥涓婃湁淇濊瘉銆傚湪鍏挜涓庣閽ョ鐞嗘柟闈紝鏁板瓧絳懼悕搴旂敤涓庡姞瀵嗛偖浠禤GP鎶鏈濂界浉鍙嶃傚湪鏁板瓧絳懼悕搴旂敤涓紝鍙戦佽呯殑鍏挜鍙互寰堟柟渚垮湴寰楀埌錛屼絾浠栫殑縐侀挜鍒欓渶瑕佷弗鏍間繚瀵嗐?
PKI錛圥ublic Key Infrastructure錛夋妧鏈?
PKI鎶鏈槸涓縐嶄互涓嶅縐板姞瀵嗘妧鏈負(fù)鏍稿績銆佸彲浠ヤ負(fù)緗戠粶鎻愪緵瀹夊叏鏈嶅姟鐨勫叕閽ュ熀紜璁炬柦銆侾KI鎶鏈渶鍒濅富瑕佸簲鐢ㄥ湪Internet鐜涓紝涓哄鏉傜殑浜掕仈緗戠郴緇熸彁渚涚粺涓鐨勮韓浠借璇併佹暟鎹姞瀵嗗拰瀹屾暣鎬т繚闅滄満鍒躲傜敱浜嶱KI鎶鏈湪緗戠粶瀹夊叏棰嗗煙鎵琛ㄧ幇鍑虹殑宸ㄥぇ浼樺娍錛屽洜鑰屽彈鍒伴摱琛屻佽瘉鍒搞佹斂搴滅瓑鏍稿績搴旂敤緋葷粺鐨勯潚鐫愩侾KI鎶鏈棦鏄俊鎭畨鍏ㄦ妧鏈殑鏍稿績錛屼篃鏄數(shù)瀛愬晢鍔$殑鍏抽敭鍜屽熀紜鎶鏈傜敱浜庨氳繃緗戠粶榪涜鐨勭數(shù)瀛愬晢鍔°佺數(shù)瀛愭斂鍔$瓑媧誨姩緙哄皯鐗╃悊鎺ヨЕ錛屽洜鑰屼嬌寰楀埄鐢ㄧ數(shù)瀛愭柟寮忛獙璇佷俊浠誨叧緋誨彉寰楄嚦鍏抽噸瑕侊紝PKI鎶鏈伆濂借兘澶熸湁鏁堣В鍐崇數(shù)瀛愬晢鍔″簲鐢ㄤ腑鐨勬満瀵嗘с佺湡瀹炴с佸畬鏁存с佷笉鍙惁璁ゆу拰瀛樺彇鎺у埗絳夊畨鍏ㄩ棶棰樸備竴涓疄鐢ㄧ殑PKI浣撶郴榪樺繀欏誨厖鍒嗚冭檻浜掓搷浣滄у拰鍙墿灞曟с侾KI浣撶郴鎵鍖呭惈鐨勮璇佷腑蹇冿紙CA錛夈佹敞鍐屼腑蹇冿紙RA錛夈佺瓥鐣ョ鐞嗐佸瘑閽ヤ笌璇佷功綆$悊銆佸瘑閽ュ浠戒笌鎭㈠銆佹挙閿緋葷粺絳夊姛鑳芥ā鍧楀簲璇ユ湁鏈哄湴緇撳悎鍦ㄤ竴璧楓?
]]>
姒傝堪
鏄庢枃錛圥laintext錛?/span>
瀵嗘枃(Ciphertext)
鍔犲瘑錛圗ncrypt 錛?/span>
瑙e瘑錛圖ecrypt錛?/span>
瀵嗙爜綆楁硶(Cryptography Algorithm)
瀵嗛挜錛圫ecret Key 錛?/span>
1銆佺郴緇熺粍鎴?/span>
2銆佷簲鍏冪粍{ M錛孋錛孠錛孍錛孌 }
銆銆瀵嗙爜鎶鏈殑涓涓熀鏈姛鑳芥槸瀹炵幇淇濆瘑閫氫俊錛岀粡鍏哥殑淇濆瘑閫氫俊妯″瀷 銆銆
娉ㄦ剰錛氫粎鐢ㄤ竴涓繚瀵嗛氫俊妯″瀷鏉ュ畬鏁存弿榪板瘑鐮佺郴緇燂紝鍙兘鏄茍涓嶅叏闈㈠拰鍑嗙‘鐨勶紝鍥犱負(fù)鐜板湪鐨勫瘑鐮佺郴緇熶笉鍗曞崟鍙彁渚涗俊鎭殑鏈哄瘑鎬ф湇鍔°備繚瀵嗛氫俊鏄瘑鐮佹妧鏈殑涓涓熀鏈姛鑳姐?/span>
鏄庢枃錛圥laintext錛?/span>
銆銆寰呬吉瑁呮垨鍔犲瘑鐨勬秷鎭紙Message錛夈傚湪閫氫俊緋葷粺涓畠鍙兘鏄瘮鐗規(guī)祦錛屽鏂囨湰銆佷綅鍥俱佹暟瀛楀寲鐨勮闊蟲祦鎴栨暟瀛楀寲鐨勮棰戝浘鍍忕瓑 銆備竴鑸彲浠ョ畝鍗曠殑璁や負(fù)鏄庢枃鏄湁鎰忎箟鐨勫瓧絎︽垨姣旂壒闆嗭紝鎴栭氳繃鏌愮鍏紑鐨勭紪鐮佹爣鍑嗗氨鑳借幏寰楃殑娑堟伅銆傛槑鏂囧父鐢╩鎴杙琛ㄧず銆?/span>
瀵嗘枃(Ciphertext)
銆銆瀵規(guī)槑鏂囨柦鍔犳煇縐嶄吉瑁呮垨鍙樻崲鍚庣殑杈撳嚭錛屼篃鍙涓烘槸涓嶅彲鐩存帴鐞嗚В鐨勫瓧絎︽垨姣旂壒闆嗭紝瀵嗘枃甯哥敤c琛ㄧず銆?/span>
鍔犲瘑錛圗ncrypt 錛?/span>
銆銆鎶婂師濮嬬殑淇℃伅錛堟槑鏂囷級(jí)杞崲涓哄瘑鏂囩殑淇℃伅鍙樻崲榪囩▼銆?/span>
瑙e瘑錛圖ecrypt錛?/span>
銆銆鎶婂繁鍔犲瘑鐨勪俊鎭紙瀵嗘枃錛夋仮澶嶆垚鍘熷淇℃伅鏄庢枃鐨勮繃紼嬶紝涔熺О涓鴻劚瀵嗐?/span>
瀵嗙爜綆楁硶(Cryptography Algorithm)
銆銆涔熺畝縐板瘑鐮侊紙Cipher錛夛紝閫氬父鏄寚鍔犮佽В瀵嗚繃紼嬫墍浣跨敤鐨勪俊鎭彉鎹㈣鍒欙紝鏄敤浜庝俊鎭姞瀵嗗拰瑙e瘑鐨勬暟瀛﹀嚱鏁般?銆銆瀵規(guī)槑鏂囪繘琛屽姞瀵嗘椂鎵閲囩敤鐨勮鍒欑О浣滃姞瀵嗙畻娉曪紝鑰屽瀵嗘枃榪涜瑙e瘑鏃舵墍閲囩敤鐨勮鍒欑О浣滆В瀵嗙畻娉曘傚姞瀵嗙畻娉曞拰瑙e瘑綆楁硶鐨勬搷浣滈氬父閮芥槸鍦ㄤ竴緇勫瘑閽ョ殑鎺у埗涓嬭繘琛岀殑銆?/span>
瀵嗛挜錛圫ecret Key 錛?/span>
銆銆瀵嗙爜綆楁硶涓殑涓涓彲鍙樺弬鏁幫紝閫氬父鏄竴緇勬弧瓚充竴瀹氭潯浠剁殑闅忔満搴忓垪銆?銆銆鐢ㄤ簬鍔犲瘑綆楁硶鐨勫彨鍋氬姞瀵嗗瘑閽ワ紝鐢ㄤ簬瑙e瘑綆楁硶鐨勫彨鍋氳В瀵嗗瘑閽ワ紝鍔犲瘑瀵嗛挜鍜岃В瀵嗗瘑閽ュ彲鑳界浉鍚岋紝涔熷彲鑳戒笉鐩稿悓銆?銆銆
瀵嗛挜甯哥敤k琛ㄧず銆?/span>
瀵嗙爜緋葷粺
1銆佺郴緇熺粍鎴?/span>
鍙互鏈夊涓嬪嚑涓儴鍒嗭細(xì) 銆銆
–娑堟伅絀洪棿M錛堝張縐版槑鏂囩┖闂達(dá)級(jí)錛氭墍鏈夊彲鑳芥槑鏂噈鐨勯泦鍚堬紱 銆銆
–瀵嗘枃絀洪棿C錛氭墍鏈夊彲鑳藉瘑鏂嘽鐨勯泦鍚堬紱 銆銆
–瀵嗛挜絀洪棿K錛氭墍鏈夊彲鑳藉瘑閽鐨勯泦鍚堬紝鍏朵腑姣忎竴瀵嗛挜k鐢卞姞瀵嗗瘑閽e鍜岃В瀵嗗瘑閽d緇勬垚錛屽嵆k錛濓紙ke錛宬d錛夛紱 銆銆
–鍔犲瘑綆楁硶E錛氫竴綈囩敱鍔犲瘑瀵嗛挜鎺у埗鐨勩佷粠M鍒癈鐨勫姞瀵嗗彉鎹紱 銆銆
–瑙e瘑綆楁硶D: 涓綈囩敱瑙e瘑瀵嗛挜鎺у埗鐨勩佷粠C鍒癕鐨勮В瀵嗗彉鎹€?/span>
2銆佷簲鍏冪粍{ M錛孋錛孠錛孍錛孌 }
瀵圭О綆楁硶鐨勫姞瀵嗗拰瑙e瘑琛ㄧず涓猴細(xì)
Ek(M)=C
Dk(C)=M
榪欑綆楁硶鍏鋒湁濡備笅鐨勭壒鎬э細(xì)
Dk(Ek(M))=M
]]>