乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Linux下C語言使用openssl庫進行加密

       dwlinux_gs 2015-06-24

      在這里插一小節(jié)加密的吧,使用openssl庫進行加密。

      使用MD5加密

      我們以一個字符串為例,新建一個文件filename.txt,在文件內寫入hello ,然后在Linux下可以使用命令md5sum filename.txt計算md5值 ==> b1946ac92492d2347c6235b4d2611184  。雖然寫入的是hello這5個字符,但是我們使用命令xxd filename.txt后可以看出文件結尾處會有個0x0a這個回車符。所以在下面的代碼中才會有\(zhòng)n。

       1 //打開/usr/include/openssl/md5.h這個文件我們可以看到一些函數
       2 // 初始化 MD5 Contex, 成功返回1,失敗返回0
       3 int MD5_Init(MD5_CTX *c);
       4 // 循環(huán)調用此函數,可以將不同的數據加在一起計算MD5,成功返回1,失敗返回0
       5 int MD5_Update(MD5_CTX *c, const void *data, size_t len);
       6 // 輸出MD5結果數據,成功返回1,失敗返回0
       7 int MD5_Final(unsigned char *md, MD5_CTX *c);
       8 // MD5_Init,MD5_Update,MD5_Final三個函數的組合,直接計算出MD5的值
       9 unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
      10 // 內部函數,不需要調用
      11 void MD5_Transform(MD5_CTX *c, const unsigned char *b);

      新建一個cpp文件用于計算MD5值

       1 #include <openssl/md5.h>
       2 #include <string.h>
       3 #include <stdio.h>
       4 
       5 int main()
       6 {
       7     MD5_CTX ctx;
       8     unsigned char outmd[16];
       9     int i=0;
      10 
      11     memset(outmd,0,sizeof(outmd));
      12     MD5_Init(&ctx);
      13     MD5_Update(&ctx,"hel",3);
      14     MD5_Update(&ctx,"lo\n",3);
      15     MD5_Final(outmd,&ctx);
      16     for(i=0;i<16;i<i++)
      17     {
      18         printf("%02X",outmd[i]);
      19     }
      20     printf("\n");
      21     return 0;
      22 }

      編譯選項為: g++ MD5test.cpp -lssl -o MD5test

      運行后的結果為: B1946AC92492D2347C6235B4D2611184

      注意這里用到openssl庫,可以運行 yum install openssl  和 yum install openssl-devel 進行安裝。

      下面這個代碼是對文件進行MD5計算。

       1 #include <openssl/md5.h>
       2 #include <string.h>
       3 #include <stdio.h>
       4 
       5 int main()
       6 {
       7     MD5_CTX ctx;
       8     unsigned char outmd[16];
       9     char buffer[1024];
      10     char filename[32];
      11     int len=0;
      12     int i;
      13     FILE * fp=NULL;
      14     memset(outmd,0,sizeof(outmd));
      15     memset(filename,0,sizeof(filename));
      16     memset(buffer,0,sizeof(buffer));
      17     printf("請輸入文件名,用于計算MD5值:");
      18     scanf("%s",filename);
      19     fp=fopen(filename,"rb");
      20     if(fp==NULL)
      21     {
      22         printf("Can't open file\n");
      23         return 0;
      24     }
      25 
      26     MD5_Init(&ctx);
      27     while((len=fread(buffer,1,1024,fp))>0)
      28     {
      29         MD5_Update(&ctx,buffer,len);
      30         memset(buffer,0,sizeof(buffer));
      31     }
      32     MD5_Final(outmd,&ctx);
      33 
      34     for(i=0;i<16;i<i++)
      35     {
      36         printf("%02X",outmd[i]);
      37     }
      38     printf("\n");
      39     return 0;
      40 }

      運行得到結果后,我們可以使用md5sum命令進行驗證。

      使用SHA1加密

        openssl里幾個函數講解

       1 //SHA1算法是對MD5算法的升級,計算結果為20字節(jié)(160位),使用方法如下:
       2 //打開/usr/include/openssl/sha.h這個文件我們可以看到一些函數
       3 // 初始化 SHA Contex, 成功返回1,失敗返回0
       4 int SHA_Init(SHA_CTX *c);
       5 // 循環(huán)調用此函數,可以將不同的數據加在一起計算SHA1,成功返回1,失敗返回0
       6 int SHA_Update(SHA_CTX *c, const void *data, size_t len);
       7 // 輸出SHA1結果數據,成功返回1,失敗返回0
       8 int SHA_Final(unsigned char *md, SHA_CTX *c);
       9 // SHA_Init,SHA_Update,SHA_Final三個函數的組合,直接計算出SHA1的值
      10 unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
      11 // 內部函數,不需要調用
      12 void SHA_Transform(SHA_CTX *c, const unsigned char *data);
      13 
      14 //上面的SHA可以改為SHA1,SHA224,SHA256,SHA384,SHA512就可以實現多種加密了

      我們對上面的程序進行修改

       1 #include <openssl/sha.h>
       2 #include <string.h>
       3 #include <stdio.h>
       4 
       5 int main()
       6 {
       7     SHA_CTX stx;
       8     unsigned char outmd[20];//注意這里的字符個數為20
       9     char buffer[1024];
      10     char filename[32];
      11     int len=0;
      12     int i;
      13     FILE * fp=NULL;
      14     memset(outmd,0,sizeof(outmd));
      15     memset(filename,0,sizeof(filename));
      16     memset(buffer,0,sizeof(buffer));
      17     printf("請輸入文件名,用于計算SHA1值:");
      18     scanf("%s",filename);
      19     fp=fopen(filename,"rb");
      20     if(fp==NULL)
      21     {
      22         printf("Can't open file\n");
      23         return 0;
      24     }
      25 
      26     SHA1_Init(&stx);
      27     while((len=fread(buffer,1,1024,fp))>0)
      28     {
      29         SHA1_Update(&stx,buffer,len);
      30         memset(buffer,0,sizeof(buffer));
      31     }
      32     SHA1_Final(outmd,&stx);
      33 
      34     for(i=0;i<20;i<i++)
      35     {
      36         printf("%02X",outmd[i]);
      37     }
      38     printf("\n");
      39     return 0;
      40 }

      MD5有128bit(16個char)*SHA1有160bit(20個char)*SHA256有256bit(32個char)*SHA244有244bit(28個char)*SHA512有512bit(64個char).所以要注意修改大小哦:-O

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多