當前位置:首頁 » 密碼管理 » openssl加密

openssl加密

發布時間: 2022-01-09 05:35:24

Ⅰ openssl可以加密多大文件

如果你需要對文件進行加密,可以試一下
超級加密3000
這款軟體,
使用文件夾保護加密數據的話,大小是沒限制的哦

Ⅱ 如何用C語言來使用openssl rsa進行公鑰加密,已有公鑰和明文

1. 本程序使用2048位密鑰對,每次加密時,原始數據的最大長度為245位元組,加密後的密文長度為256位元組.(採用打PADDING 的加密方式)

2. 如果所加密數據長度大於245位元組,請分多次加密,後將密文按順序存儲;解密時,每次讀取256位元組,進行解密,將解密後的數據依次按順序存儲,即可還原原始數據.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#define OPENSSLKEY "test.key"
#define PUBLICKEY "test_pub.key"
#define BUFFSIZE 1024
char *my_encrypt(char *str, char *path_key); //加密
char *my_decrypt(char *str, char *path_key); //解密
int main(void)
{
char *source = "i like dancing !!!";
char *ptf_en, *ptf_de;
printf("source is :%s\n", source);
//1.加密
ptf_en = my_encrypt(source, PUBLICKEY);
if (ptf_en == NULL){
return 0;
}else{
printf("ptf_en is :%s\n", ptf_en);
}
//2.解密
ptf_de = my_decrypt(ptf_en, OPENSSLKEY);
if (ptf_de == NULL){
return 0;
}else{
printf("ptf_de is :%s\n", ptf_de);
}
if(ptf_en) free(ptf_en);
if(ptf_de) free(ptf_de);
return 0;
}
//加密
char *my_encrypt(char *str, char *path_key)
{
char *p_en = NULL;
RSA *p_rsa = NULL;
FILE *file = NULL;
int lenth = 0; //flen為源文件長度, rsa_len為秘鑰長度
//1.打開秘鑰文件
if((file = fopen(path_key, "rb")) == NULL)
{
perror("fopen() error 111111111 ");
goto End;
}
//2.從公鑰中獲取 加密的秘鑰
if((p_rsa = PEM_read_RSA_PUBKEY(file, NULL,NULL,NULL )) == NULL)
{
ERR_print_errors_fp(stdout);
goto End;
}
lenth = strlen(str);
p_en = (char *)malloc(256);
if(!p_en)
{
perror("malloc() error 2222222222");
goto End;
}
memset(p_en, 0, 256);
//5.對內容進行加密
if(RSA_public_encrypt(lenth, (unsigned char*)str, (unsigned char*)p_en, p_rsa, RSA_PKCS1_PADDING) < 0)
{
perror("RSA_public_encrypt() error 2222222222");
goto End;
}
End:
//6.釋放秘鑰空間, 關閉文件
if(p_rsa) RSA_free(p_rsa);
if(file) fclose(file);
return p_en;
}
//解密
char *my_decrypt(char *str, char *path_key)
{
char *p_de = NULL;
RSA *p_rsa = NULL;
FILE *file = NULL;
//1.打開秘鑰文件
file = fopen(path_key, "rb");
if(!file)
{
perror("fopen() error 22222222222");
goto End;
}
//2.從私鑰中獲取 解密的秘鑰
if((p_rsa = PEM_read_RSAPrivateKey(file, NULL,NULL,NULL )) == NULL)
{
ERR_print_errors_fp(stdout);
goto End;
}
p_de = (char *)malloc(245);
if(!p_de)
{
perror("malloc() error ");
goto End;
}
memset(p_de, 0, 245);
//5.對內容進行加密
if(RSA_private_decrypt(256, (unsigned char*)str, (unsigned char*)p_de, p_rsa, RSA_PKCS1_PADDING) < 0)
{
perror("RSA_public_encrypt() error ");
goto End;
}
End:
//6.釋放秘鑰空間, 關閉文件
if(p_rsa) RSA_free(p_rsa);
if(file) fclose(file);
return p_de;
}

Ⅲ 怎麼調用openssl的加密演算法介面

提供個加密函數代碼:

#define MAX_ENCRYPT_LEN 1024
void MyEncrypt(const unsigned char *sMsg, int cbMsg, unsigned char *sEncryptMsg, int &cbEncryptMsg)
{

OpenSSL_add_all_algorithms();

//產生會話密鑰

unsigned char SessionKey[16];

RAND_bytes(SessionKey,16);

//加密

EVP_CIPHER_CTX ctx;

EVP_CIPHER_CTX_init(&ctx);

if(EVP_EncryptInit_ex(&ctx,EVP_get_cipherbynid(NID_aes_128_ecb),NULL,SessionKey,NULL))

{

int offseti=0;

int offseto=0;

int offsett=0;

for(;;)

{

if(cbMsg-offseti<=MAX_ENCRYPT_LEN)

{

EVP_EncryptUpdate(&ctx, sEncryptMsg+offseto, &offsett, sMsg+offseti, cbMsg-offseti);

offseto+=offsett;

break;

}

else

{

EVP_EncryptUpdate(&ctx, sEncryptMsg+offseto, &offsett, sMsg+offseti, MAX_SIGN_MSG);

offseti+=MAX_SIGN_MSG;

offseto+=offsett;

}

}

EVP_EncryptFinal_ex(&ctx, sEncryptMsg+offseto, &offsett);

offseto+=offsett;

cbEncryptMsg=offseto;

}

EVP_CIPHER_CTX_cleanup(&ctx);
}

參數解釋:
const unsigned char *sMsg 需要解密的明文
int cbMsg 明文長度
unsigned char *sEncryptMsg 輸出密文
int &cbEncryptMsg 密文長度

好了,這個函數剛寫的,驗證了一下,是沒有問題的
解密與這個比較類似

Ⅳ openssl 加密演算法區別

openssl加密演算法區別是:RSA/DSA ,不同的是RSA可以用於加/解密,也可以用於簽名驗簽,DSA則只能用於簽名。至於SHA則是一種和md5相同的演算法。

它不是用於加密解密或者簽名的,它被稱為摘要演算法。就是通過一種演算法,依據數據內容生成一種固定長度的摘要,這串摘要值與原數據存在對應關系,就是原數據會生成這個摘要,但是,這個摘要是不能還原成原數據的。

正常情況下是這樣的,這個演算法起的作用就是,如果你把原數據修改一點點,那麼生成的摘要都會不同,傳輸過程中把原數據給你再給你一個摘要,你把得到的原數據同樣做一次摘要演算法,與給你的摘要相比較就可以知道這個數據有沒有在傳輸過程中被修改了。

openssl加密演算法的實際運用:

實際應用過程中,因為需要加密的數據可能會很大,進行加密費時費力,所以一般都會把原數據先進行摘要,然後對這個摘要值進行加密,將原數據的明文和加密後的。

摘要值一起傳給你。這樣你解開加密後的摘要值,再和你得到的數據進行的摘要值對應一下就可以知道數據有沒有被修改了。

而且,因為私鑰只有你有,只有你能解密摘要值,所以別人就算把原數據做了修改,然後生成一個假的摘要給你也是不行的,你這邊用密鑰也根本解不開。

Ⅳ openssl 默認使用什麼加密

使用VS2005下的Visual Studio 2005 Command Prompt進入控制台模式(這個模式會自動設置各種環境變數) 、解壓縮openssl的包,進入openssl的目錄 、perl configure VC-WIN32 盡量在這個目錄下執行該命令,否則找不到Configure文件,或者指定完整的Configure文件路徑。 、ms\do_ms 在解壓目錄下執行ms\do_ms命令 、nmake -f ms\ntdll.mak編譯後在openssl解壓目錄下執行,完成編譯後。輸出的文件在out32dll裡面,包括應用程序的可執行文件、lib文件和dll文件 注意:在運行第五步時,cl編譯器會抱怨說.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated(不被推薦的),建議使用_read。呵呵,我可不想將OpenSSL中的所有的read函數修改為_read。再看cl的錯誤代碼 error C2220,於是上MSDN上查找: warning treated as error - no object file generated /WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated. 是由於設置了/WX選項,將所有的警告都作為錯誤對待,所以。。。 於是打開OpenSSL目錄下的MS目錄下的ntdll.mak文件,將CFLAG的/WX選項去掉,存檔。

linux 怎麼讀取openssl加密後的文件

將文件夾package打成tar包 package.tar.gz 並加密 密碼是 password tar czf – package | openssl des3 -salt -kpassword -out package.tar.gz 加密的tar包只能在Linux上解密,無法在Windows上使用。 解密tar包並且解壓縮 openssl des3 -d -k pas...

Ⅶ 如何利用OpenSSL庫進行RSA加密和解密

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<openssl/rsa.h>
#include<openssl/engine.h>

intmain(intargc,char*argv[])
{
printf("openssl_testbegin ");
RSA*rsa=NULL;
charoriginstr[]="hello ";//這是我們需要加密的原始數據
//allocateRSAstructure,首先需要申請一個RSA結構題用於存放生成的公私鑰,這里rsa就是這個結構體的指針
rsa=RSA_new();
if(rsa==NULL)
{
printf("RSA_newfailed ");
return-1;
}

//generateRSAkeys
BIGNUM*exponent;
exponent=BN_new();//生成RSA公私鑰之前需要選擇一個奇數(oddnumber)來用於生成公私鑰
if(exponent==NULL)
{
printf("BN_newfailed ");
gotoFAIL1;
}
if(0==BN_set_word(exponent,65537))//這里選擇奇數65537
{
printf("BN_set_wordfailed ");
gotoFAIL1;
}


//這里molus的長度選擇4096,小於1024的molus長度都是不安全的,容易被破解
if(0==RSA_generate_key_ex(rsa,4096,exponent,NULL))
{
printf("RSA_generate_key_exfailed ");
gotoFAIL;
}
char*cipherstr=NULL;
//分配一段空間用於存儲加密後的數據,這個空間的大小由RSA_size函數根據rsa算出
cipherstr=malloc(RSA_size(rsa));
if(cipherstr==NULL)
{
printf("malloccipherstrbuffailed ");
gotoFAIL1;
}
//下面是實際的加密過程,最後一個參數paddingtype,有以下幾種。
/*
RSA_PKCS1_PADDINGPKCS#1v1.5padding..
RSA_PKCS1_OAEP_PADDING
EME-OAEPasdefinedinPKCS#1v2.0withSHA-1,..
RSA_SSLV23_PADDING
PKCS#1v1.5paddingwithanSSL-.
RSA_NO_PADDING
RawRSAencryption.ntheapplicationcode..
*/
//這里首先用公鑰進行加密,選擇了RSA_PKCS1_PADDING

if(RSA_size(rsa)!=RSA_public_encrypt(strlen(originstr)+1,originstr,cipherstr,rsa,RSA_PKCS1_PADDING))
{
printf("encryptionfailure ");
gotoFAIL2;
}
printf("theoriginalstringis%s ",originstr);
printf("theencryptedstringis%s ",cipherstr);


//Now,let'
//下面來用私鑰解密,首先需要一個buffer用於存儲解密後的數據,這個buffer的長度要足夠(小於RSA_size(rsa))
//這里分配一個長度為250的字元數組,應該是夠用的。
chardecrypted_str[250];
intdecrypted_len;
if(-1=(decrypted_len=RSA_private_decrypt(256,cipherstr,decrypted_str,rsa,RSA_PKCS1_PADDING)))
{
printf("decryptionfailure ");
gotoFAIL2;
}
printf("decryptedstringlengthis%d,decryped_stris%s ",decrypted_len,decrypted_str);
FAIL2:
free(cipherstr);
FAIL1:
BN_free(exponent);
FAIL:
RSA_free(rsa);
return0;
}

以上是源代碼,下面使用下面的編譯命令在源碼所在路徑下生成可執行文件
gcc *.c -o openssl_test -lcrypto -ldl -L/usr/local/ssl/lib -I/usr/local/ssl/include
其中,-lcrypto和-ldl是必須的,前者是OpenSSL中的加密演算法庫,後者是用於成功載入動態庫。

Ⅷ openssl 對稱加密有哪些

OpenSSL一共提供了8種對稱加密演算法,其中7種是分組加密演算法,僅有的一種流加密演算法是RC4。這7種分組加密演算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5。
參考網路。

Ⅸ 如何把openssl生成rsa加密的私鑰顯現可讀

首先需要進入openssl的交互界面,在命令行了輸入openssl即可;

1)生成RSA私鑰:

genrsa -out rsa_private_key.pem 1024

該命令會生成1024位的私鑰,生成成功的界面如下:

此時我們就可以在當前路徑下看到rsa_private_key.pem文件了。

2)把RSA私鑰轉換成PKCS8格式
輸入命令pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt,並回車
得到生成功的結果,這個結果就是PKCS8格式的私鑰,如下圖:

3) 生成SA公鑰

輸入命令rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,並回車,
得到生成成功的結果,如下圖:

此時,我們可以看到一個文件名為rsa_public_key.pem的文件,打開它,可以看到-----BEGIN PUBLIC KEY-----開頭,
-----END PUBLIC KEY-----結尾的沒有換行的字元串,這個就是公用

熱點內容
二手冷庫壓縮機 發布:2024-07-03 13:28:26 瀏覽:492
如何開創我的世界寶可夢伺服器 發布:2024-07-03 12:47:49 瀏覽:946
怎麼把我的世界的配置調到最低 發布:2024-07-03 12:47:38 瀏覽:295
cuit網路存儲 發布:2024-07-03 12:24:36 瀏覽:882
快手上的驗證密碼是什麼 發布:2024-07-03 12:12:38 瀏覽:281
hp存儲型號 發布:2024-07-03 12:08:10 瀏覽:392
天天跑酷android 發布:2024-07-03 12:07:22 瀏覽:433
如何創建伺服器的URL地址 發布:2024-07-03 12:04:30 瀏覽:378
發票密碼區超出多少 發布:2024-07-03 11:28:54 瀏覽:553
足球聯賽源碼 發布:2024-07-03 11:23:11 瀏覽:310