加解密演算法,在我們軟體開發中進場使用。很多人對加解密演算法只是聽過,沒有太多的使用。網上有很多介紹,不過沒有全面講解。作為上海怡勝實訓中心經理,今天給大家做個介紹。
首先加解密演算法分成一般開發中很少自己去設計實現,自己設計實現的演算法可能存在自己很難發現的漏洞。而且設計實現也是非常耗費時間精力的,與其如此不如採用拿來主義。
從**拿?
openssl
這個是乙個開源的程式庫
openssl
的使用手冊。《
openssl
開發手冊
.chm》
接下來,我們來看看加解密演算法常用的有哪些種,每種的特點。
從是否可以還原原文角度分為:可逆、不可逆。所謂可逆不可逆簡單講就是由原文加密成密文之後是否可以還原成原文。可以還原成原文的稱之為可逆,不能還原成原文的稱之為不可逆。可能會有不少人覺得不可逆演算法為什麼會存在,用來幹嘛呢?其實不可逆演算法我們使用的也非常多,像我們的賬號密碼中的密碼一般都是採用不可逆的演算法進行加密儲存的。等要登入的時候,再把使用者輸入的密碼也加密成密文,比較密文是否相同來驗證賬號密碼。這樣即使有人看到了使用者設定的密碼的密文,也沒辦法解析。
從加解密過程中使用的秘鑰是否相同,分為對稱的和不對稱的。就是對稱的是加密和解密使用相同的
key。那什麼是
key呢?
那我們先看看加解密演算法的基本模型
上面這個圖我們假設原文是
241(在計算機裡面所有的資訊都會被轉化成二進位制的數字)。我們使用乙個加密演算法,就是把每個數字
+key
這裡假設的
key為
1。那麼得出的密文就是
352。如果想要解密的話,就必須知道
key。否則沒辦法還原。當然世事無絕對有人可能會採用暴力方式嘗試
key值,這個是後話。那麼解密的時候跟加密是相反的過程。
這樣就完成了乙個解密的過程。這上面舉的例子也是乙個對稱演算法的例子,那麼費對稱演算法是加解密的
key值是不同的。這種
key一般是分乙個公鑰乙個私鑰,而且是成對的,其實他們之間存在著乙個耦合關係。這樣使用乙個加密使用另乙個解密。
那麼加解密演算法常用的有哪些呢?
aes:對稱,高階加密演算法
des:dataencryption standard
對稱演算法
rsa:
非對稱
md5:不可逆,概述演算法
加密演算法本質是把資料資訊由明文轉變成密文的乙個過程。這個過程其實本質並不複雜,基本上每個人都可以想到乙個辦法來完成這件事情。例如:我們把所有的數字實際對應做乙個變化。
其實可以自己編寫加解密演算法,並不難,但考慮到實際開發的安全性,一般不建議自己開發。所以大多情況會採用現成的開源演算法。像
opensll
演算法可以根據
openssl
手冊來呼叫。
以上幾種各自有相應的呼叫。
以上幾種各自有相應的呼叫。 例如
aes演算法:
aes.c /*
this product includes cryptographicsoftware written by
上海怡勝資訊科技****
www.ysitroad.com */
#include
#include
#include
#include
int aes_encrypt(char *in, char *key,char *out) //, int olen)
intlen = strlen(in), en_len = 0;
while(en_len < len) //
輸入輸出字串夠長,並且是
aes_block_size
的整數倍,需要嚴格限制
returnen_len; }
int aes_decrypt(char *in, char *key,char *out,int len)
int en_len = 0;
while(en_len < len)
return1; }
int main()
printf("\n\n");
aes_decrypt(obuf,"key1",buf2,len);
printf("decode:%s\n",buf2); }
des演算法:des.c
//const_des_cblock input = buf;
des_cblock input;
des_cblock output;
int i;
des_key_schedule schedule;
/* des_random_key(&key); *//* generate a random key */
des_string_to_key("pass", &key);
des_set_key_checked(&key, &schedule);
//input string
scanf("%s",buf);
printf("cleartext:%s \n", buf);
//encrypt
des_ecb_encrypt((void *)buf,(void*) output, &schedule, des_encrypt);
printf("encrypted! ");
//output encode
printf("ciphertext:");
for (i = 0; i < sizeof(output); i++)
printf("%02x",output[i]);
printf(" \n");
memset(buf,0,1024);
//decrypt
des_ecb_encrypt((void *)output,(void *)buf, &schedule, des_decrypt);
printf("decrypted! ");
printf("cleartext:%s \n", buf);
return 0;}
具體的呼叫可以看一下手冊。根據手冊來。可以**:
378333774。
加解密演算法
工作中經常用到加解密演算法大概有以下三種 由不定長的資料轉化為固定長的字串,代表有 sha1 str raw out false 演算法不夠複雜raw out預設為false,生成乙個32位的加密串 如果為true,則生成乙個16位的二進位製流 md5 str strict false strict...
加解密演算法
演算法型別 特點優勢 缺陷代表演算法 非對稱加密 加解密金鑰不相關 無需提前共享金鑰 計算效率低,仍存在中間人攻擊可能 rsa elgamal 橢 圓曲線系列演算法 對稱加密 加解密金鑰相同或可推算 計算效率高,加密強度高 需提前共享金鑰 易洩露 des 3des aes idea 對稱加密 sym...
加解密演算法一 雜湊演算法 對稱加解密
net中的加解密操作所涉及的物件都在命名空間system.security.cryptography下,所以應先在程式中新增using system.security.cryptography。用來產生一些資料片段 例如訊息或會話項 的雜湊值的演算法。好的雜湊演算法具有在輸入資料中的更改可以更改結果...