??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品aⅴ无码中文字字幕不卡 久久精品成人欧美大片 ,一本久久a久久精品综合香蕉,亚洲国产成人久久精品99http://www.shnenglu.com/aaxron/category/15782.html记录修行的印? zh-cnMon, 30 Aug 2021 23:57:23 GMTMon, 30 Aug 2021 23:57:23 GMT60单文件AES加解密算?/title><link>http://www.shnenglu.com/aaxron/archive/2021/08/30/217802.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 30 Aug 2021 13:39:00 GMT</pubDate><guid>http://www.shnenglu.com/aaxron/archive/2021/08/30/217802.html</guid><wfw:comment>http://www.shnenglu.com/aaxron/comments/217802.html</wfw:comment><comments>http://www.shnenglu.com/aaxron/archive/2021/08/30/217802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/aaxron/comments/commentRss/217802.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aaxron/services/trackbacks/217802.html</trackback:ping><description><![CDATA[#pragma once   #include <stdint.h>  //for int8_t #include <string.h>  //for memcmp #include <wmmintrin.h> //for intrinsics for AES-NI //compile using gcc and following arguments: -g;-O0;-Wall;-msse2;-msse;-march=native;-maes //internal stuff   //macros #define DO_ENC_BLOCK(m,k) \     do{\      m = _mm_xor_si128  (m, k[ 0]); \      m = _mm_aesenc_si128 (m, k[ 1]); \      m = _mm_aesenc_si128 (m, k[ 2]); \      m = _mm_aesenc_si128 (m, k[ 3]); \      m = _mm_aesenc_si128 (m, k[ 4]); \      m = _mm_aesenc_si128 (m, k[ 5]); \      m = _mm_aesenc_si128 (m, k[ 6]); \      m = _mm_aesenc_si128 (m, k[ 7]); \      m = _mm_aesenc_si128 (m, k[ 8]); \      m = _mm_aesenc_si128 (m, k[ 9]); \      m = _mm_aesenclast_si128(m, k[10]);\     }while(0)   #define DO_DEC_BLOCK(m,k) \     do{\      m = _mm_xor_si128  (m, k[10+0]); \      m = _mm_aesdec_si128 (m, k[10+1]); \      m = _mm_aesdec_si128 (m, k[10+2]); \      m = _mm_aesdec_si128 (m, k[10+3]); \      m = _mm_aesdec_si128 (m, k[10+4]); \      m = _mm_aesdec_si128 (m, k[10+5]); \      m = _mm_aesdec_si128 (m, k[10+6]); \      m = _mm_aesdec_si128 (m, k[10+7]); \      m = _mm_aesdec_si128 (m, k[10+8]); \      m = _mm_aesdec_si128 (m, k[10+9]); \      m = _mm_aesdeclast_si128(m, k[0]);\     }while(0)   #define AES_128_key_exp(k, rcon) aes_128_key_expansion(k, _mm_aeskeygenassist_si128(k, rcon))   static __m128i aes_128_key_expansion(__m128i key, __m128i keygened) {     keygened = _mm_shuffle_epi32(keygened, _MM_SHUFFLE(3,3,3,3));     key = _mm_xor_si128(key, _mm_slli_si128(key, 4));     key = _mm_xor_si128(key, _mm_slli_si128(key, 4));     key = _mm_xor_si128(key, _mm_slli_si128(key, 4));     return _mm_xor_si128(key, keygened); }   //public API static void aes128_load_key_enc_only(uint8_t *enc_key, __m128i *key_schedule) {     key_schedule[0] = _mm_loadu_si128((const __m128i*) enc_key);     key_schedule[1] = AES_128_key_exp(key_schedule[0], 0x01);     key_schedule[2] = AES_128_key_exp(key_schedule[1], 0x02);     key_schedule[3] = AES_128_key_exp(key_schedule[2], 0x04);     key_schedule[4] = AES_128_key_exp(key_schedule[3], 0x08);     key_schedule[5] = AES_128_key_exp(key_schedule[4], 0x10);     key_schedule[6] = AES_128_key_exp(key_schedule[5], 0x20);     key_schedule[7] = AES_128_key_exp(key_schedule[6], 0x40);     key_schedule[8] = AES_128_key_exp(key_schedule[7], 0x80);     key_schedule[9] = AES_128_key_exp(key_schedule[8], 0x1B);     key_schedule[10] = AES_128_key_exp(key_schedule[9], 0x36); }   static void aes128_load_key(uint8_t *enc_key, __m128i *key_schedule) {     aes128_load_key_enc_only(enc_key, key_schedule);       // generate decryption keys in reverse order.     // k[10] is shared by last encryption and first decryption rounds     // k[0] is shared by first encryption round and last decryption round (and is the original user key)     // For some implementation reasons, decryption key schedule is NOT the encryption key schedule in reverse order     key_schedule[11] = _mm_aesimc_si128(key_schedule[9]);     key_schedule[12] = _mm_aesimc_si128(key_schedule[8]);     key_schedule[13] = _mm_aesimc_si128(key_schedule[7]);     key_schedule[14] = _mm_aesimc_si128(key_schedule[6]);     key_schedule[15] = _mm_aesimc_si128(key_schedule[5]);     key_schedule[16] = _mm_aesimc_si128(key_schedule[4]);     key_schedule[17] = _mm_aesimc_si128(key_schedule[3]);     key_schedule[18] = _mm_aesimc_si128(key_schedule[2]);     key_schedule[19] = _mm_aesimc_si128(key_schedule[1]); }   static void aes128_enc(__m128i *key_schedule, uint8_t *plainText,uint8_t *cipherText) {     __m128i m = _mm_loadu_si128((__m128i *) plainText);     DO_ENC_BLOCK(m,key_schedule);     _mm_storeu_si128((__m128i *) cipherText, m); }   static void aes128_dec(__m128i *key_schedule, uint8_t *cipherText,uint8_t *plainText) {     __m128i m = _mm_loadu_si128((__m128i *) cipherText);     DO_DEC_BLOCK(m,key_schedule);     _mm_storeu_si128((__m128i *) plainText, m); }   //return 0 if no error //1 if encryption failed //2 if decryption failed //3 if both failed static int aes128_self_test(void) {     uint8_t plain[]  = {0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31, 0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34};     uint8_t enc_key[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};     uint8_t cipher[]  = {0x39, 0x25, 0x84, 0x1d, 0x02, 0xdc, 0x09, 0xfb, 0xdc, 0x11, 0x85, 0x97, 0x19, 0x6a, 0x0b, 0x32};     uint8_t computed_cipher[16];     uint8_t computed_plain[16];     int out=0;     __m128i key_schedule[20];     aes128_load_key(enc_key,key_schedule);     aes128_enc(key_schedule,plain,computed_cipher);     aes128_dec(key_schedule,cipher,computed_plain);     if(memcmp(cipher,computed_cipher,sizeof(cipher))) out=1;     if(memcmp(plain,computed_plain,sizeof(plain))) out|=2;     return out; }<img src ="http://www.shnenglu.com/aaxron/aggbug/217802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aaxron/" target="_blank">天下</a> 2021-08-30 21:39 <a href="http://www.shnenglu.com/aaxron/archive/2021/08/30/217802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对openssl做的一些简单封?/title><link>http://www.shnenglu.com/aaxron/archive/2014/03/21/206266.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 21 Mar 2014 09:40:00 GMT</pubDate><guid>http://www.shnenglu.com/aaxron/archive/2014/03/21/206266.html</guid><wfw:comment>http://www.shnenglu.com/aaxron/comments/206266.html</wfw:comment><comments>http://www.shnenglu.com/aaxron/archive/2014/03/21/206266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/aaxron/comments/commentRss/206266.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aaxron/services/trackbacks/206266.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">#include </span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> GetRSA(RSA </span><span style="color: #000000">**</span><span style="color: #000000">RsaKeys)<br />{<br />    </span><span style="color: #000000">*</span><span style="color: #000000">RsaKeys</span><span style="color: #000000">=</span><span style="color: #000000">RSA_generate_key(RSALEN,RSA_F4,NULL,NULL);<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(NULL</span><span style="color: #000000">==*</span><span style="color: #000000">RsaKeys)<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000"> ;<br />}<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">取得U钥</span><span style="color: #008000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> GetPrivateKey(RSA </span><span style="color: #000000">*</span><span style="color: #000000">RsaKeys,RSA </span><span style="color: #000000">**</span><span style="color: #000000">Pvtkey)<br />{<br />    </span><span style="color: #000000">*</span><span style="color: #000000">Pvtkey </span><span style="color: #000000">=</span><span style="color: #000000"> RSAPrivateKey_dup(RsaKeys);<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(NULL</span><span style="color: #000000">==*</span><span style="color: #000000">Pvtkey)<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">; <br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">U钥To数据?/span><span style="color: #008000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> PrivateKeyToData(RSA </span><span style="color: #000000">*</span><span style="color: #000000">Pvtkey,unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000"> bufkey)<br />{<br />    BIO</span><span style="color: #000000">*</span><span style="color: #000000"> pBio </span><span style="color: #000000">=</span><span style="color: #000000"> BIO_new(BIO_s_mem());<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (pBio </span><span style="color: #000000">==</span><span style="color: #000000"> NULL) {<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    memset(bufkey,</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">,RSALEN);<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">( i2d_RSAPrivateKey_bio(pBio,Pvtkey) </span><span style="color: #000000"><</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000"> ) {<br />        BIO_free(pBio);    <br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    BIO_read(pBio,bufkey,RSALEN);<br /><br />    BIO_free(pBio);    <br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">数据ToU钥</span><span style="color: #008000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> DataToPrivateKey(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000"> bufkey,RSA </span><span style="color: #000000">**</span><span style="color: #000000">Pvtkey)<br />{<br />    BIO </span><span style="color: #000000">*</span><span style="color: #000000">pBio </span><span style="color: #000000">=</span><span style="color: #000000"> BIO_new(BIO_s_mem());<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (pBio </span><span style="color: #000000">==</span><span style="color: #000000"> NULL) {<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    BIO_write(pBio,bufkey,RSALEN);<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">( NULL </span><span style="color: #000000">==</span><span style="color: #000000"> d2i_RSAPrivateKey_bio(pBio,Pvtkey)) {<br />        BIO_free(pBio);<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    BIO_free(pBio);<br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">取得公钥</span><span style="color: #008000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> GetPublicKey(RSA </span><span style="color: #000000">*</span><span style="color: #000000">RsaKeys,RSA </span><span style="color: #000000">**</span><span style="color: #000000">Pubkey)<br />{<br />    </span><span style="color: #000000">*</span><span style="color: #000000">Pubkey </span><span style="color: #000000">=</span><span style="color: #000000"> RSAPublicKey_dup(RsaKeys);<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(NULL</span><span style="color: #000000">==*</span><span style="color: #000000">Pubkey)<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">; <br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">公钥To数据?/span><span style="color: #008000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> PublicKeyToData(RSA </span><span style="color: #000000">*</span><span style="color: #000000">Pubkey,unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000"> bufkey)<br />{<br />    BIO </span><span style="color: #000000">*</span><span style="color: #000000">pBio </span><span style="color: #000000">=</span><span style="color: #000000"> BIO_new(BIO_s_mem());<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (pBio </span><span style="color: #000000">==</span><span style="color: #000000">NULL) {<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    memset(bufkey,</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">,RSALEN);<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(i2d_RSAPublicKey_bio(pBio,Pubkey) </span><span style="color: #000000"><</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">) {<br />        BIO_free(pBio);<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    BIO_read(pBio,bufkey,RSALEN);<br />    BIO_free(pBio);<br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">数据To公钥</span><span style="color: #008000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> DataToPublicKey(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">bufkey,RSA </span><span style="color: #000000">**</span><span style="color: #000000">Pubkey)<br />{<br />    BIO    </span><span style="color: #000000">*</span><span style="color: #000000"> pBio</span><span style="color: #000000">=</span><span style="color: #000000">BIO_new(BIO_s_mem());<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (pBio </span><span style="color: #000000">==</span><span style="color: #000000">NULL)<br />    {<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    BIO_write(pBio,bufkey,RSALEN);<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">( d2i_RSAPublicKey_bio(pBio,Pubkey) </span><span style="color: #000000"><</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000"> ) {<br />        BIO_free(pBio);    <br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />    }<br />    BIO_free(pBio);    <br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;    <br />}<br /><br /></span><span style="color: #008000">/*</span><span style="color: #008000">公钥加密->U钥解密</span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> RSAPublicEncrypt(RSA </span><span style="color: #000000">*</span><span style="color: #000000">Publickey, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">From, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">To)<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> len</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;<br />    len </span><span style="color: #000000">=</span><span style="color: #000000"> RSA_size(Publickey) </span><span style="color: #000000">-</span><span style="color: #000000">11</span><span style="color: #000000">;<br /><br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000"> </span><span style="color: #000000">==</span><span style="color: #000000"> (len</span><span style="color: #000000">=</span><span style="color: #000000">RSA_public_encrypt(len,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)From,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)To,Publickey,RSA_PKCS1_PADDING)) )<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> len;<br />}<br /><br /><br /></span><span style="color: #008000">/*</span><span style="color: #008000">U钥解密<-公钥加密</span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> RSAPrivateDecrypt(RSA </span><span style="color: #000000">*</span><span style="color: #000000">Privtekey, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">From, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">To)<br />{<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000"> </span><span style="color: #000000">==</span><span style="color: #000000"> (RSA_private_decrypt(RSALEN</span><span style="color: #000000">/</span><span style="color: #000000">8</span><span style="color: #000000">,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)From,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)To,Privtekey,RSA_PKCS1_PADDING)))<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /><br /></span><span style="color: #008000">/*</span><span style="color: #008000">U钥加密->公钥解密</span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> RSAPrivateEncrypt(RSA </span><span style="color: #000000">*</span><span style="color: #000000">Privtekey, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">From, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">To)<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> len </span><span style="color: #000000">=</span><span style="color: #000000"> RSA_size(Privtekey)</span><span style="color: #000000">-</span><span style="color: #000000">11</span><span style="color: #000000">;<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000"> </span><span style="color: #000000">==</span><span style="color: #000000"> (len </span><span style="color: #000000">=</span><span style="color: #000000"> RSA_private_encrypt(len,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)From,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)To,Privtekey,RSA_PKCS1_PADDING)))<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> len;<br />}<br /><br /><br /></span><span style="color: #008000">/*</span><span style="color: #008000">公钥解密<-U钥加密</span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #0000ff">int</span><span style="color: #000000"> RSAPublicDecrypt(RSA </span><span style="color: #000000">*</span><span style="color: #000000">Publickey, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">From, </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">To)<br />{<br />    </span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000"> </span><span style="color: #000000">==</span><span style="color: #000000"> (RSA_public_decrypt(RSALEN</span><span style="color: #000000">/</span><span style="color: #000000">8</span><span style="color: #000000">,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)From,(unsigned </span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">)To,Publickey,RSA_PKCS1_PADDING)) )<br />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><br />    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /><br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">void DesEncrypt(char *Key,char *Msg, char *Result,int Length)<br /></span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008000">//</span><span style="color: #008000">    int             n=0;<br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_cblock      desblock;<br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_key_schedule schedule;<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_string_to_key(Key,&desblock);<br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_set_key_checked( &desblock, &schedule );<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_cfb64_encrypt( (unsigned char *)Msg, (unsigned char *)Result,<br /></span><span style="color: #008000">//</span><span style="color: #008000">        Length, &schedule, &desblock, &n, DES_ENCRYPT );<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">}<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">void DesDecrypt( char *Key, char *Msg, char *Result,int Length)<br /></span><span style="color: #008000">//</span><span style="color: #008000">{<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">    int             n=0;<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_cblock      desblock;<br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_key_schedule schedule;<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_string_to_key(Key,&desblock);<br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_set_key_checked( &desblock, &schedule );<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">    DES_cfb64_encrypt( (unsigned char *) Msg, (unsigned char *)Result,<br /></span><span style="color: #008000">//</span><span style="color: #008000">        Length, &schedule, &desblock, &n, DES_DECRYPT );<br /></span><span style="color: #008000">//</span><span style="color: #008000"><br /></span><span style="color: #008000">//</span><span style="color: #008000">}</span><span style="color: #008000"><br /></span><span style="color: #000000"><br /></span><span style="color: #0000ff">void</span><span style="color: #000000"> DESGenerateKey(</span><span style="color: #0000ff">char</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">pKey)<br />{<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> nLen</span><span style="color: #000000">=</span><span style="color: #000000">33</span><span style="color: #000000">;<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> flag</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;<br />    </span><span style="color: #0000ff">int</span><span style="color: #000000"> i,k</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><br />    srand((unsigned)time(NULL));<br />    </span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000"><</span><span style="color: #000000">nLen</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />    {<br />        flag</span><span style="color: #000000">=</span><span style="color: #000000">rand()</span><span style="color: #000000">%</span><span style="color: #000000">2</span><span style="color: #000000">;<br />        </span><span style="color: #0000ff">if</span><span style="color: #000000">(flag)<br />            pKey[k</span><span style="color: #000000">++</span><span style="color: #000000">]</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">A</span><span style="color: #000000">'</span><span style="color: #000000">+</span><span style="color: #000000">rand()</span><span style="color: #000000">%</span><span style="color: #000000">26</span><span style="color: #000000">;<br />        </span><span style="color: #0000ff">else</span><span style="color: #000000"><br />            pKey[k</span><span style="color: #000000">++</span><span style="color: #000000">]</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">a</span><span style="color: #000000">'</span><span style="color: #000000">+</span><span style="color: #000000">rand()</span><span style="color: #000000">%</span><span style="color: #000000">26</span><span style="color: #000000">;<br />    }<br /><br />    pKey[k]</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">\0</span><span style="color: #000000">'</span><span style="color: #000000">;<br />}</span></div><img src ="http://www.shnenglu.com/aaxron/aggbug/206266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aaxron/" target="_blank">天下</a> 2014-03-21 17:40 <a href="http://www.shnenglu.com/aaxron/archive/2014/03/21/206266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>密码??、Openssl的安?/title><link>http://www.shnenglu.com/aaxron/archive/2011/06/19/148949.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Sun, 19 Jun 2011 02:20:00 GMT</pubDate><guid>http://www.shnenglu.com/aaxron/archive/2011/06/19/148949.html</guid><wfw:comment>http://www.shnenglu.com/aaxron/comments/148949.html</wfw:comment><comments>http://www.shnenglu.com/aaxron/archive/2011/06/19/148949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/aaxron/comments/commentRss/148949.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aaxron/services/trackbacks/148949.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">openssl?br />openssl是一个功能丰富且自包含的开源安全工L。它提供的主要功能有QSSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量Y法(对称/非对U?摘要)、大数运、非对称法密钥生成、ASN.1~解码库、证书请?PKCS10)~解码、数字证书编解码、CRL~解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个h数字证书格式实现{功能?br /><br />openssl采用C语言作ؓ开发语aQ这使得它具有优U的跨q_性能。openssl支持Linux、UNIX、windows、Mac{^台。openssl目前最新的版本是openssl-</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">.0d.<br /><br />官方|址Qhttp://www.openssl.org/<br /><br />linux下的安装Q?br />wget http://www.openssl.org/source/openssl-</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">.0d.tar.gz<br />tar xvzf openssl-</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">.0d.tar.gz<br />cd openssl-</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">.0d<br />如果需要zlib压羃模块的话Q还需要先安装zlib<br />然后Q?br />./config --prefix</span><span style="color: #000000; ">=</span><span style="color: #000000; ">/usr/local/ssl shared zlib-dynamic<br /><br />不需要就直接用:<br />./config --prefix</span><span style="color: #000000; ">=</span><span style="color: #000000; ">/usr/local/ssl shared no-zlib<br /><br />更多详细帮助误?br />./config --help<br /><br />然后Q?br />make && make install<br /><br />没问题的话就会一路跑下去Q可以去泡杯咖啡Q个妞Q回来差不多好了?br /><br />ARMq_的交叉编译安装:<br />~译Qopenssl<br />./config no-asm no-zlib --prefix</span><span style="color: #000000; ">=</span><span style="color: #000000; ">/arm/openssl os/compiler:arm-linux-gcc<br /><br />修改Q?br />CC</span><span style="color: #000000; ">=</span><span style="color: #000000; "> arm-linux-gcc<br />AR</span><span style="color: #000000; ">=</span><span style="color: #000000; "> arm-linux-ar $(ARFLAGS) r<br />RANLIB</span><span style="color: #000000; ">=</span><span style="color: #000000; "> arm-linux-ranlib<br />如果存在 -march</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pentium 去掉?br /><br /><br />windows下的安装Q?br />OpenSSL在Windows下的~译安装<br />解压openssl-</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">.0d.tar.gz以后Q?nbsp;在其目录下可以发现有个INSTALL.W32文gQ这个文件就是在windows下的安装说明?br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">.安装perl</span><span style="color: #000000; ">,</span><span style="color: #000000; ">perl可以从http://www.activestate.com/ActivePerl下蝲?br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">.安装~译器(L一个都可以Q?/span><span style="color: #000000; ">,</span><span style="color: #000000; ">我在Visual C++ 2005安装成功了,VC2008安装p|?br /><br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">.如果通过汇编的方式编译,需要安装汇~语a~译器。MASM NASM都可以。如果速度要求不高Q可以不用汇~的方式~译Q即不需要安装。MASM一般由VC++自带QWindows NT </span><span style="color: #000000; ">4.0</span><span style="color: #000000; "> DDK a和Windows </span><span style="color: #000000; ">98</span><span style="color: #000000; "> DDK也带有MASM。把XXXXXml.exe和XXXXXml.err文gQ提取出来,命名为ml.exe和ml.errQƈ把他们放到PATH路径中即可?br /><br />NASM可以免费获取Q很多地斚w可以下蝲刎ͼ如http://www.kernel.org/pub/software/devel/nasm/binaries/win32/<br />nasmw.exe文g也需要放到PATH路径中?br /><br /></span><span style="color: #000000; ">4</span><span style="color: #000000; ">.打开一个DOSH口Q输入:perl Configure VC-WIN32<br /><br /></span><span style="color: #000000; ">5</span><span style="color: #000000; ">.如果使用MASMQ接着输入Qms\do_masm<br />如果使用NASMQ接着输入Qms\do_nasm<br />如果不用汇~语a~译器,输入:ms\do_ms<br /><br />我用的是:ms\do_ms<br /></span><span style="color: #000000; ">6</span><span style="color: #000000; ">.在DOSH口中接着输入Qnmake -f ms\ntdll.mak<br />如果没有错误的话Q编译就通过了,在out32dll目录下面可以看刎ͼ生成的dll文g和可执行文g了。把他们攑ֈQPATH环境变量对应的一个目录里可以了?br /><br /><br />下一节讲openssl的一些基知识</span></div><img src ="http://www.shnenglu.com/aaxron/aggbug/148949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aaxron/" target="_blank">天下</a> 2011-06-19 10:20 <a href="http://www.shnenglu.com/aaxron/archive/2011/06/19/148949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>密码??、Crypto++使用http://www.shnenglu.com/aaxron/archive/2010/12/25/137413.html天下天下Sat, 25 Dec 2010 03:29:00 GMThttp://www.shnenglu.com/aaxron/archive/2010/12/25/137413.htmlhttp://www.shnenglu.com/aaxron/comments/137413.htmlhttp://www.shnenglu.com/aaxron/archive/2010/12/25/137413.html#Feedback0http://www.shnenglu.com/aaxron/comments/commentRss/137413.htmlhttp://www.shnenglu.com/aaxron/services/trackbacks/137413.htmlCrypto++ 的官|?
http://www.cryptopp.com/

下蝲,我下的版本是: Crypto++ Library 5.6.1 - a Free C++ Class Library of Cryptographic Schemes

Crypto++® Library 5.6.1

解压?用VS2008?个工E?
cryptest
cryptlib
cryptopp
dlltest

~译 cryptlib 工程 ,乖乖, ~译出来的cryptlib.lib ?0多M,
不管?l箋.
cryptlib.lib库加入到工程?
~写hello world
//现在写一个hello worldE序看看能不能编译通过?br>#include <iostream>
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;
}
 


附上一个用h?
http://www.shnenglu.com/Files/aaxron/CryptoPPGuide.7z




天下 2010-12-25 11:29 发表评论
]]>
密码??、对U加密和不对U加?/title><link>http://www.shnenglu.com/aaxron/archive/2010/12/25/137405.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Sat, 25 Dec 2010 02:07:00 GMT</pubDate><guid>http://www.shnenglu.com/aaxron/archive/2010/12/25/137405.html</guid><wfw:comment>http://www.shnenglu.com/aaxron/comments/137405.html</wfw:comment><comments>http://www.shnenglu.com/aaxron/archive/2010/12/25/137405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/aaxron/comments/commentRss/137405.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aaxron/services/trackbacks/137405.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;"><span style="color: red; font-weight: bold; font-family: Verdana;">对称加密</span><span style="font-family: Verdana;">  </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">    采用单钥密码pȝ的加密方法,同一个密钥可以同时用作信息的加密和解密,q种加密Ҏ(gu)UCؓ对称加密Q也UCؓ单密钥加密?  </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">需要对加密和解密用相同密钥的加密法。由于其速度Q对U性加密通常在消息发送方需要加密大量数据时使用。对U性加密也UCؓ密钥加密?  </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">所谓对Uͼ是采用q种加密Ҏ(gu)的双方用方式用同样的密钥进行加密和解密。密钥实际上是一U算法,通信发送方使用q种法加密数据Q接收方再以同样的算法解密数据?  </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">因此对称式加密本w不是安全的?</span><br style="font-family: Verdana;"><span style="font-family: Verdana;">  </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">常用的对U加密算法有Q?/span><br style="font-family: verdana;" _extended="true"> <pre style="font-family: verdana;" _extended="true">DESQData Encryption StandardQ:数据加密标准Q速度较快Q适用于加密大量数据的场合?br _extended="true"><br _extended="true">3DESQTriple DESQ:是基于DESQ对一块数据用三个不同的密钥进行三ơ加密,强度更高?br _extended="true"><br _extended="true">AESQAdvanced Encryption StandardQ:高加密标准Q是下一代的加密法标准Q速度快,安全U别高; <br><br>RC4Q也是ؓ   RSA   Data   Security,   Inc.   开发的密码pȝ的商标名U?br><br><br><font style="font-size: 16px; font-family: Verdana;">DES?DES、Blowfish、IDEA、RC4、RC5、RC6?/font><font style="font-size: 16px;">AES</font> <br></pre> <span style="font-family: Verdana;">DES、IDEA、RC2、RC4、SKIPJACK法{?/span><br style="font-family: Verdana;"><span style="font-family: Verdana;">用单钥密码系l的加密Ҏ(gu)Q同一个密钥可以同时用作信息的加密和解密,q种加密Ҏ(gu)UCؓ对称加密Q也UCؓ单密钥加密?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"> <p style="text-indent: -18pt; margin-left: 18pt; font-family: Verdana;"><strong> DES</strong> </p> <p style="font-family: Verdana;">单密钥算?是信息的发送方采用密钥Aq行数据加密,信息的接收方采用同一个密钥Aq行数据解密.</p> <p style="font-family: Verdana;">单密钥算法是一个对U算?</p> <p style="font-family: Verdana;">~点:׃采用同一个密钥进行加密解?在多用户的情况下,密钥保管的安全性是一个问?</p> <br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="color: red; font-weight: bold; font-family: Verdana;">对称加密法</span><br style="font-family: Verdana;"><span style="font-family: Verdana;">    对称加密法是应用较早的加密法Q技术成熟。在对称加密法中,数据发信方将明文Q原始数据)和加密密钥一Lq特D加密算法处理后Q其变成复杂的加密密文发送出厅R收信方收到密文后,若想解读原文Q则需要用加密用q的密钥及相同算法的逆算法对密文q行解密Q才能其恢复成可读明文。在对称加密法中,使用的密钥只有一个,发收信双斚w使用q个密钥Ҏ(gu)据进行加密和解密Q这p求解密方事先必须知道加密密钥。对U加密算法的特点是算法公开、计量、加密速度快、加密效率高。不之处是Q交易双斚w使用同样钥匙Q安全性得不到保证。此外,每对用户每次使用对称加密法Ӟ都需要用其他h不知道的惟一钥匙Q这会得发收信双方所拥有的钥匙数量成几何U数增长Q密钥管理成为用L负担。对U加密算法在分布式网l系l上使用较ؓ困难Q主要是因ؓ密钥理困难Q用成本较高。在计算Z|系l中q泛使用的对U加密算法有DES、IDEA和AES?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">  传统的DES׃只有56位的密钥Q因此已l不适应当今分布式开攄l对数据加密安全性的要求?997qRSA数据安全公司发v了一?#8220;DES挑战?#8221;的活动,志愿者四ơ分别用四个月?1天?6个小时和22个小时破解了其用56位密钥DES法加密的密文。即DES加密法在计机速度提升后的今天被认为是不安全的?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">  AES是美国联邦政府采用的商业及政府数据加密标准,预计在未来几十q里代替DES在各个领域中得到q泛应用。AES提供128位密钥,因此Q?28位AES的加密强度是56位DES加密强度?021倍还多。假讑֏以制造一部可以在1U内破解DES密码的机器,那么使用q台机器破解一?28位AES密码需要大U?49亿万q的旉。(更深一步比较而言Q宇宙一般被认ؓ存在了还不到200亿年Q因此可以预计,国国家标准局倡导的AES卛_作ؓ新标准取代DES?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="color: red; font-weight: bold; font-family: Verdana;">非对U加?/span><br style="font-family: Verdana;"><span style="font-family: Verdana;">  1976q_国学者Dime和Henman决信息公开传送和密钥理问题Q提ZU新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息Q安全地达成一致的密钥Q这是“公开密钥pȝ”。相对于“对称加密法”q种Ҏ(gu)也叫?#8220;非对U加密算?#8221;?  与对U加密算法不同,非对U加密算法需要两个密钥:公开密钥QpublickeyQ和U有密钥QprivatekeyQ。公开密钥与私有密钥是一对,如果用公开密钥Ҏ(gu)据进行加密,只有用对应的U有密钥才能解密Q如果用U有密钥Ҏ(gu)据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这U算法叫作非对称加密法?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">Ҏ(gu)?/span><br style="font-family: Verdana;"><span style="font-family: Verdana;">  非对U加密算法实现机密信息交换的基本q程是:甲方生成一对密钥ƈ其中的一把作为公用密钥向其它方公开Q得到该公用密钥的乙方用该密钥Ҏ(gu)密信息进行加密后再发送给甲方Q甲方再用自׃存的另一把专用密钥对加密后的信息q行解密。甲方只能用其专用密钥解密由其公用密钥加密后的Q何信息?  非对U加密算法的保密性比较好Q它消除了最l用户交换密钥的需要,但加密和解密p旉ѝ速度慢,它不适合于对文g加密而只适用于对量数据q行加密?  l典的非对称加密法如RSA法{安全性都相当?   非对U加密的典型应用是数字签名?  采用双钥密码pȝ的加密方法,在一个过E中使用两个密钥Q一个用于加密,另一个用于解密,q种加密Ҏ(gu)UCؓ非对U加密,也称为公钥加密,因ؓ其中一个密钥是公开的(另一个则需要保密)?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="color: red; font-weight: bold; font-family: Verdana;">不对U加密算?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">  不对U加密算法用两把完全不同但又是完全匚w的一寚w匙—公钥和U钥。在使用不对U加密算法加密文件时Q只有用匹配的一对公钥和U钥Q才能完成对明文的加密和解密q程。加密明文时采用公钥加密Q解密密文时使用U钥才能完成Q而且发信方(加密者)知道收信方的公钥Q只有收信方Q解密者)才是唯一知道自己U钥的h。不对称加密法的基本原理是Q如果发信方惛_送只有收信方才能解读的加密信息,发信方必首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信Ҏ(gu)到加密密文后Q用自qU钥才能解密密文。显Ӟ采用不对U加密算法,收发信双方在通信之前Q收信方必须自己早已随机生成的公钥送给发信方,而自׃留私钥。由于不对称法拥有两个密钥Q因而特别适用于分布式pȝ中的数据加密。广泛应用的不对U加密算法有RSA法和美国国家标准局提出的DSA。以不对U加密算法ؓ基础的加密技术应用非常广泛?/span><br style="font-family: Verdana;"> <pre style="font-family: verdana;" _extended="true"><br>RSAQRivest   Shamir   AdlemenQ一U因特网加密和认证体p)Q由 RSA 公司发明Q是一个支持变长密钥的公共密钥法Q需要加密的文g块的长度也是可变的;<br><span style="font-family: monospace;"></span> <p><span style="font-family: monospace;"></span>DSAQDigital Signature AlgorithmQ:数字{֐法Q是一U标准的 DSSQ数字签名标准)Q?span style="font-family: monospace;"><br></span></p> <p><span style="font-family: monospace;"></span>ECCQElliptic Curves CryptographyQ:椭圆曲线密码~码学?/p> </pre> <br style="font-family: Verdana;"> <p style="text-indent: -18pt; margin-left: 18pt; font-family: Verdana;"><strong> DSA</strong> </p> <p style="font-family: Verdana;">所谓数字签名是指发送方从发送报文中抽取特征数据(UCؓ数字指纹或摘?,然后用发送方的私钥对数字指纹使用加密法q行法操作,接受方用发送方已经公开的公钥解密ƈ验证报文.</p> <p style="font-family: Verdana;">数字{֐用户验证发送方w䆾或者发送方信息的完整?/p> <br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">中文名称Q密钥加?</span><br style="font-family: Verdana;"><span style="font-family: Verdana;">英文名称Qsecret key encryption </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">定义Q发送和接收数据的双方,使用相同的或对称的密钥对明文q行加密解密q算的加密方法?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">公钥加密</span><br style="font-family: Verdana;"><span style="font-family: Verdana;">中文名称Q公钥加?</span><br style="font-family: Verdana;"><span style="font-family: Verdana;">英文名称Qpublic key encryption </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">定义Q由对应的一对唯一性密?卛_开密钥和私有密?l成的加密方法。它解决了密钥的发布和管理问题,是目前商业密码的核心?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">中文名称Q数字签?</span><br style="font-family: Verdana;"><span style="font-family: Verdana;">英文名称Qdigital signature </span><br style="font-family: Verdana;"><span style="font-family: Verdana;">定义Q以?sh)子形式存在于数据信息之中的Q或作ؓ光件的或逻辑上与之有联系的数据,可用于L别数据签|h的n份,q表明签|hҎ(gu)据信息中包含的信息的认可?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">数字{֐Q又U公钥数字签名、电(sh)子签章)是一U类似写在纸上的普通的物理{֐Q但是用了公钥加密领域的技术实玎ͼ用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运,一个用于签名,另一个用于验证?/span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">Hash法 </span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">Hash法特别的地方在于它是一U单向算法,用户可以通过Hash法对目标信息生成一D늉定长度的唯一的Hash|却不能通过q个Hash值重新获得目标信息。因此Hash法常用在不可还原的密码存储、信息完整性校验等? </span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">常见的Hash法有MD2、MD4、MD5、HAVAL、SHA </span><br style="font-family: Verdana;"><br style="font-family: Verdana;"> <p style="text-indent: -18pt; margin-left: 18pt; font-family: Verdana;"><strong> MD5/SHA</strong> </p> <p style="font-family: Verdana;">MessageDigest是一个数据的数字指纹.卛_一个Q意长度的数据q行计算,产生一个唯一指纹?<br>MessageDigest的特?</p> <p style="text-indent: -18pt; margin-left: 29.25pt; font-family: Verdana;">A) 两个不同的数?难以生成相同的指U号</p> <p style="text-indent: -18pt; margin-left: 29.25pt; font-family: Verdana;">B) 对于指定的指U号,难以逆向计算出原始数?/p> <br style="font-family: Verdana;"> <br style="font-family: Verdana;"><span style="font-family: Verdana;">其他介绍:</span><br style="font-family: Verdana;"><span style="font-family: Verdana;">PGPQPretty Good PrivacyQ技? PGP技术是一个基于不对称加密法RSA公钥体系的邮件加密技术,也是一U操作简单、用方ѝ普及程度较高的加密软g。PGP技术不但可以对?sh)子邮g加密Q防止非授权者阅MӞq能对电(sh)子邮仉加数字签名,使收信h能明了解发信h的真实n份;也可以在不需要通过M保密渠道传递密钥的情况下,使h们安全地q行保密通信。PGP技术创造性地把RSA不对U加密算法的方便性和传统加密体系l合hQ在数字{֐和密钥认证管理机制方面采用了无缝l合的y妙设计,使其几乎成ؓ最为流行的公钥加密软g包? </span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">数字{֐QDigital SignatureQ技? 数字{֐技术是不对U加密算法的典型应用。数字签名的应用q程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内Ҏ(gu)关的变量q行加密处理Q完成对数据的合?#8220;{֐”Q数据接收方则利用对方的公钥来解L到的“数字{֐”Qƈ解ȝ果用于对数据完整性的验,以确认签名的合法性。数字签名技术是在网l系l虚拟环境中认w䆾的重要技术,完全可以代替现实q程中的“亲笔{֭”Q在技术和法律上有保证。在公钥与私钥管理方面,数字{֐应用与加密邮件PGP技术正好相反。在数字{֐应用中,发送者的公钥可以很方便地得到Q但他的U钥则需要严g密? </span><br style="font-family: Verdana;"><br style="font-family: Verdana;"><span style="font-family: Verdana;">PKIQPublic Key InfrastructureQ技? PKI技术是一U以不对U加密技术ؓ核心、可以ؓ|络提供安全服务的公钥基设施。PKI技术最初主要应用在Internet环境中,为复杂的互联|系l提供统一的n份认证、数据加密和完整性保障机制。由于PKI技术在|络安全领域所表现出的巨大优势Q因而受到银行、证券、政府等核心应用pȝ的青睐。PKI技术既是信息安全技术的核心Q也是电(sh)子商务的关键和基技术。由于通过|络q行的电(sh)子商务、电(sh)子政务等zd~少物理接触Q因而得利用电(sh)子方式验证信dpd得至关重要,PKI技术恰好能够有效解决电(sh)子商务应用中的机密性、真实性、完整性、不可否认性和存取控制{安全问题。一个实用的PKI体系q必d分考虑互操作性和可扩展性。PKI体系所包含的认证中心(CAQ、注册中心(RAQ、策略管理、密钥与证书理、密钥备份与恢复、撤销pȝ{功能模块应该有机地l合在一赗? </span><br style="font-family: Verdana;"> <br style="font-family: Verdana;"><br style="font-family: Verdana;"> <br style="font-family: Verdana;"></span> <img src ="http://www.shnenglu.com/aaxron/aggbug/137405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aaxron/" target="_blank">天下</a> 2010-12-25 10:07 <a href="http://www.shnenglu.com/aaxron/archive/2010/12/25/137405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>密码?一)、基http://www.shnenglu.com/aaxron/archive/2010/12/25/137403.html天下天下Sat, 25 Dec 2010 02:03:00 GMThttp://www.shnenglu.com/aaxron/archive/2010/12/25/137403.htmlhttp://www.shnenglu.com/aaxron/comments/137403.htmlhttp://www.shnenglu.com/aaxron/archive/2010/12/25/137403.html#Feedback0http://www.shnenglu.com/aaxron/comments/commentRss/137403.htmlhttp://www.shnenglu.com/aaxron/services/trackbacks/137403.html密码学基
概述
明文QPlaintextQ?/span>
密文(Ciphertext)
加密QEncrypt Q?/span>
解密QDecryptQ?/span>
密码法(Cryptography Algorithm)
密钥QSecret Key Q?/span>
1、系l组?/span>
2、五元组{ MQCQKQEQD }

  密码技术的一个基本功能是实现保密通信Q经典的保密通信模型       
注意Q仅用一个保密通信模型来完整描q密码系l,可能是ƈ不全面和准确的,因ؓ现在的密码系l不单单只提供信息的机密性服务。保密通信是密码技术的一个基本功能?/span>

明文QPlaintextQ?/span>
  待伪装或加密的消息(MessageQ。在通信pȝ中它可能是比Ҏ(gu)Q如文本、位图、数字化的语x或数字化的视频图像等 。一般可以简单的认ؓ明文是有意义的字W或比特集,或通过某种公开的编码标准就能获得的消息。明文常用m或p表示?/span>
密文(Ciphertext)
  Ҏ(gu)文施加某U伪装或变换后的输出Q也可认为是不可直接理解的字W或比特集,密文常用c表示?/span>
加密QEncrypt Q?/span>
  把原始的信息Q明文)转换为密文的信息变换q程?/span>
解密QDecryptQ?/span>
  把己加密的信息(密文Q恢复成原始信息明文的过E,也称密?/span>
密码法(Cryptography Algorithm)
  也简U密码(CipherQ,通常是指加、解密过E所使用的信息变换规则,是用于信息加密和解密的数学函数?  Ҏ(gu)文进行加密时所采用的规则称作加密算法,而对密文q行解密时所采用的规则称作解密算法。加密算法和解密法的操作通常都是在一l密钥的控制下进行的?/span>
密钥QSecret Key Q?/span>
  密码法中的一个可变参敎ͼ通常是一l满一定条件的随机序列?  用于加密法的叫做加密密钥,用于解密法的叫做解密密钥,加密密钥和解密密钥可能相同,也可能不相同?  
密钥常用k表示?/span>
密码pȝ
1、系l组?/span>
可以有如下几个部分:   
–消息I间MQ又U明文空_Q所有可能明文m的集合;   
–密文I间CQ所有可能密文c的集合;   
–密钥I间KQ所有可能密钥k的集合,其中每一密钥k由加密密钥ke和解密密钥kdl成Q即kQ(keQkdQ;   
–加密法EQ一由加密密钥控制的、从M到C的加密变换;   
–解密法D: 一由解密密钥控制的、从C到M的解密变换?/span>
2、五元组{ MQCQKQEQD }
对称法的加密和解密表示为:
Ek(M)=C
Dk(C)=M

q种法h如下的特性:
Dk(Ek(M))=M 


天下 2010-12-25 10:03 发表评论
]]>
޾Ʒþһ| ޾Ʒھþ| Ѿþˬˬav| ձƷþþþĻ8 | Ʒþþþ| þþþƷþþþӰԺ| þĻƵ| ˺ݺۺϾþ88| þþݾþþ| þþƷֻоƷ2020| þùƷ| þ99Ʒ| ˾Ʒþһav | һɫþۺϺݺ| þWWW˳һƬ| ŷսþþþþþþ| AVþþƷ| þۺϺݺۺϾþ| www.þ| Ʒþùһ㽶| ھƷþþþþþӰ鶹 | þۺɫ| ѾƷþ| vaþþþ| þԭƷ| þþƷư| þӰԺþ㽶߿ۿ| 8090Ʒþһ| þþƷAVþþ| þþ޾Ʒ| һձȾþۺ| ŷƷƵһþþþƷ | þۺɫ| Ʒþþþþø| һaƬþëƬ| պŷ޹ƷĻþþ | þ99ֻоƷ66| þþƷˬӰ| þþƷһ| ϵרþ| AVһȾþ |