導航:首頁 > 文檔加密 > 基於openssl文件加密系統

基於openssl文件加密系統

發布時間:2022-08-23 03:51:38

㈠ 用openssl對文件加密解密的詳細正確程序

不好說,直接用TRUECPYPT吧

㈡ 如何利用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,已經有Key文件,如何使用這個文件進行加密和解密

個東西,我這邊需要將一個字元串加密以後傳遞給第三方公司提供的jsp頁面。加密方式是第三方提供一個Key文件,就像銀行網銀用的文件證書一樣,使用RSA方式加密的。現在第三方公司給我了兩個文件:server.cer和test.pfx。
他們給的ReadME文件內容如下:
p ,可以用於解密和加密兩個功能。
cer里只包含公

linux文檔怎麼加密,用什麼辦法好

合力天下LINUX防泄密系統概述

Linux具有天生秉承的優勢,越來越多的企業轉向了Linux的開發和應用。使用Linux操作系統的單位多數都擁有自主知識產權,如果有絲毫的泄露,都會造成巨大的損失。 基於多年的數據防泄漏防護經驗,北京合力天下數碼信息技術有限公司自主研發了一套運行在Linux平台環境下,防止Linux系統中自主知識產權泄密的產品。該系統在不改變用戶使用習慣、計算機文件格式和編譯程序的情況下,對指定類型的代碼文件進行實時、透明的加解密。所有通過非法途徑獲得的數據,都將以亂碼文件形式表現。

合力天下LINUX防泄密系統是一款功能強大且易於使用的LINUX文檔加密軟體產品,該系統採用「驅動層AES智能透明加密技術」對指定類型的文件進行實時、強制、透明的加解密。在正常使用時,計算機內存中的文件是以受保護的明文形式存放,但硬碟上保存的數據卻處於加密狀態,如果沒有合法的使用身份、訪問許可權和正確的安全通道,所有加密文件都將以密文狀態保存。

合力天下LINUX防泄密系統穩定可靠,並且具備良好的可擴展性,能同時滿足企業其它應用系統文檔加密需求,有效防止數據丟失或泄露,有助於更深入、更全面地實施數據保護,從而確保企業機密數據的高度安全。

合力天下LINUX防泄密系統產品架構

合力天下LINUX防泄密系統採用控制台/伺服器/代理(B/S/C)體系:伺服器(Server)、客戶端代理(Agent)和控制台(Management Console)三部分組成。

M/S/A三部分相互協調工作:管理員通過控制台的WEB瀏覽器制訂靈活的安全策略;安全策略被保存在伺服器上;終端計算機上安裝的代理主動連接伺服器;接收到網路連接後,伺服器把制訂好的策略下發到該終端計算機;終端計算機代理的安全引擎執行安全策略,進行安全控制。

合力天下LINUX防泄密系統部署模式

合力天下LINUX防泄密系統功能特點

一驅動層透明加密
針對研發單位,可對JAVA、C、C++ 等各種源代碼文件進行透明加密保護;
針對手機、電子書等版權單位,可針對任何需要保護其版權的文檔類型進行透明加密保護;
針對辦公環境,可對任何文件類型加密。

二編譯加密源代碼

針對研發單位,加密的源代碼文檔無需解密為明文,可直接通過編譯進程進行編譯。
編譯後的Image文件是明文,便於產品的測試與分發。

三網路通信安全隧道

加密文檔(如源代碼)需要通過文檔版本管理軟體(如CVS\SVN\GIT)通過網路或文件系統進行集中備份與共享。加密文件系統提供網路安全隧道功能,保護網路通信中的加密文件。
如加密文件需要保存到伺服器上,既可以密文存儲到伺服器上也可以明文存儲到伺服器上。
如明文存儲到伺服器上,加密系統的網路安全隧道可與合力天下LINUX防泄密系統伺服器數據保護網關聯動,實現加密文檔在上傳到伺服器網關自動解密,下載文件時網關自動加密。如此既保障了文檔的可靠性、可用性,又保障文檔的安全性。

四進程合法性驗證

對進程進行簽名認證,驗證通過的進程,才是合法進程,才能對加密文件行讀寫操作。
任何偽造進程的方式都無法讀寫加密文檔。如更改進程名稱、SVN多種協議讀寫加密文件等都無法解密文件。

五自身安全強保護

系統具有自我保護能力,在自身受到破壞不完整時整個系統依然能夠保障數據的安全性。
粘貼/拷貝控制
系統具有防粘貼拷貝能力,不可信進程可以拷貝任何數據到可信進程;但可信進程不允許拷貝數據到任何其它進程,有效防止數據的泄露。

六文件批量加密

可對明文文件批量加密,針對開源的文件很方便的合並到工程裡面。
批量加密流程具有保護機制,防止已經加密的文件再次加密,造成文件的損壞。

七可離線工作

離線即客戶端網路連接不上加密伺服器所處的狀態,如外出辦公等。
加密系統支持離線辦公,離線的安全策略為最近一次在線時的文件加密策略。

八與Windows加密系統兼容

Linux加密系統與Windows加密系統相互兼容:Windows加密的文件在Linux下能夠操作,在Linux加密的文件在Windows下能夠操作。

合力天下linux防泄密系統加密規則

1.不可信進程規則

不可信進程創建、編輯的文件都是明文文件。
不可信進程讀取的加密文件是亂碼,不可以使用。

2.可信進程規則

可信進程創建符合加密規則的文件是加密的文件。
可信進程可以透明讀寫編輯加密文件。
原不加密但符合加密規則文件,一但可信進程進行了編輯,則原文件成為加密文件。
可信進程在未創建、讀寫加密文件前,創建不符合加密規則的文件是明文的。
可信進程在未創建、讀寫加密文件前,可以任意編輯明文文件,該文件不被加密。
可信進程一旦創建、編輯了加密文件,則後續創建、編輯的所有文件都是加密的。

3.進程間拷貝粘貼規則

可以自由的從不可信進程中粘貼拷貝文字到可信進程。
可以自由的從不可信進程中粘貼拷貝文字到不可信進程。
可信進程的文字拷貝受到安全保護,禁止隨意拷貝文字。

4.編譯器進程規則

編譯器創建的二進制文件是明文的,可以隨意燒到嵌入式設備中。

5.離線加密規則

支持離線文檔加密。
離線規則為最近一次上線的文檔加密規則。

6.文件批量加密

支持文件批量代碼加密轉化。

㈤ 如何用openSSL協議加密文件

openSSL這個很復雜!一定要用它嗎?.net(.net 2.0以上)自帶有RSA演算法(非對稱加密)的簽名 加密功能!具體在System.Security.Cryptography命令空間下的System.Security.Cryptography.RSACryptoServiceProvider

㈥ 基於OPENSSL的安全客戶端設計與實現

Openssl提供了各種各樣的加密演算法,包括對稱和非對稱加密演算法。考慮到你要實現安全客戶端,那麼在與伺服器交換信息時,需要加密。
基本思想是先用非對稱加密演算法加密演算法交換對稱密鑰,以後發送和接收消息時就使用對稱密鑰。

㈦ 求用OpenSSL做的RSA文件加密程序實例,VC++6.0的,各位大俠幫幫忙,急用呀,多謝啦

#include <openssl/rsa.h>
#include <openssl/sha.h>
int main()
{
RSA *r;
int bits=1024,ret,len,flen,padding,i;
unsigned long e=RSA_3;
BIGNUM *bne;
unsigned char*key,*p;
BIO *b;
unsigned charfrom[500],to[500],out[500];

bne=BN_new();
ret=BN_set_word(bne,e);
r=RSA_new();
ret=RSA_generate_key_ex(r,bits,bne,NULL);
if(ret!=1)
{
printf("RSA_generate_key_ex err!\n");
return -1;
}
/* 私鑰i2d */

b=BIO_new(BIO_s_mem());
ret=i2d_RSAPrivateKey_bio(b,r);
key=malloc(1024);
len=BIO_read(b,key,1024);
BIO_free(b);
b=BIO_new_file("rsa.key","w");
ret=i2d_RSAPrivateKey_bio(b,r);
BIO_free(b);

/* 私鑰d2i */
/* 公鑰i2d */
/* 公鑰d2i */
/* 私鑰加密 */
flen=RSA_size(r);
printf("please select private enc padding : \n");
printf("1.RSA_PKCS1_PADDING\n");
printf("3.RSA_NO_PADDING\n");
printf("5.RSA_X931_PADDING\n");
scanf("%d",&padding);
if(padding==RSA_PKCS1_PADDING)
flen-=11;
else if(padding==RSA_X931_PADDING)
flen-=2;
else if(padding==RSA_NO_PADDING)
flen=flen;
else
{
printf("rsa not surport !\n");
return -1;
}
for(i=0;i<flen;i++)
memset(&from[i],i,1);
len=RSA_private_encrypt(flen,from,to,r,padding);
if(len<=0)
{
printf("RSA_private_encrypt err!\n");
return -1;
}
len=RSA_public_decrypt(len,to,out,r,padding);
if(len<=0)
{
printf("RSA_public_decrypt err!\n");
return -1;
}
if(memcmp(from,out,flen))
{
printf("err!\n");
return -1;
}
/* */
printf("please select public enc padding : \n");
printf("1.RSA_PKCS1_PADDING\n");
printf("2.RSA_SSLV23_PADDING\n");
printf("3.RSA_NO_PADDING\n");
printf("4.RSA_PKCS1_OAEP_PADDING\n");
scanf("%d",&padding);
flen=RSA_size(r);
if(padding==RSA_PKCS1_PADDING)
flen-=11;
else if(padding==RSA_SSLV23_PADDING)
flen-=11;
else if(padding==RSA_X931_PADDING)
flen-=2;
else if(padding==RSA_NO_PADDING)
flen=flen;
else if(padding==RSA_PKCS1_OAEP_PADDING)
flen=flen-2 * SHA_DIGEST_LENGTH-2 ;
else
{
printf("rsa not surport !\n");
return -1;
}
for(i=0;i<flen;i++)
memset(&from[i],i+1,1);
len=RSA_public_encrypt(flen,from,to,r,padding);
if(len<=0)
{
printf("RSA_public_encrypt err!\n");
return -1;
}
len=RSA_private_decrypt(len,to,out,r,padding);
if(len<=0)
{
printf("RSA_private_decrypt err!\n");
return -1;
}
if(memcmp(from,out,flen))
{
printf("err!\n");
return -1;
}
printf("test ok!\n");
RSA_free(r);
return 0;
}
上述程序中當採用公鑰RSA_SSLV23_PADDING加密,用私鑰RSA_SSLV23_PADDING解密時會報錯,原因是openssl源代碼錯誤:
rsa_ssl.c函數RSA_padding_check_SSLv23有:
if (k == -1) /* err */
{
RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23,RSA_R_SSLV3_ROLLBACK_ATTACK);
return (-1);
}
修改為k!=-1即可。
各種padding對輸入數據長度的要求:
私鑰加密:
RSA_PKCS1_PADDING RSA_size-11
RSA_NO_PADDING RSA_size-0
RSA_X931_PADDING RSA_size-2
公鑰加密
RSA_PKCS1_PADDING RSA_size-11
RSA_SSLV23_PADDING RSA_size-11
RSA_X931_PADDING RSA_size-2
RSA_NO_PADDING RSA_size-0
RSA_PKCS1_OAEP_PADDING RSA_size-2 * SHA_DIGEST_LENGTH-2

㈧ 在Linux系統中加密文件的方法

1.
oppnssl
md5
加密字元串的方法
a.手動輸入命令及過程如下:
代碼如下:
#openssl
//在終端中輸入openssl後回車。
OpenSSL>
md5
//輸入md5後回車
123456
//接著輸入123456,不要輸入回車。然後按3次ctrl+d。

//123456後面的就是密文了
解釋:為何在輸入123456後不回車呢?
是因為openssl默認會把回車符當做要加密的字元串中的一個字元,所以得到的結果不同。如果你輸入123456後回車,在按2次ctrl+d。得到的結果是:
代碼如下:
OpenSSL>
md5

123456


//因為openssl不忽略回車符導致的
b.或者直接用管道命令
代碼如下:
#
echo
-n
123456
|
openssl
md5
//必須要有-n參數,否則就不是這個結果了。

解釋:為何要加-n這個參數?
-n就表示不輸入回車符,這樣才能得到正確的結果。如果你不加-n,那麼結果和前面說的一樣為:
代碼如下:

//因為openssl不忽略回車符導致的
2.用openssl加密文件。
代碼如下:
#openssl
md
5
-in
1.txt

㈨ iOS使用openSSL加密應該怎麼做

最近幾天折騰了一下如何在iOS上使用RSA來加密。iOS上並沒有直接的RSA加密API。但是iOS提供了x509的API,而x509是支持RSA加密的。因此,我們可以通過製作自簽名的x509證書(由於對安全性要求不高,我們並不需要使用CA認證的證書),再調用x509的相關API來進行加密。接下來記錄一下整個流程。
第一步,製作自簽名的證書
1.最簡單快捷的方法,打開Terminal,使用openssl(Mac OS X自帶)生成私鑰和自簽名的x509證書。
openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem -days 3650
按照命令行的提示輸入內容就行了。
幾個說明:
public_key.der是輸出的自簽名的x509證書,即我們要用的。
private_key.pem是輸出的私鑰,用來解密的,請妥善保管。
rsa:1024這里的1024是密鑰長度,1024是比較安全的,如果需要更安全的話,可以用2048,但是加解密代價也會增加。
-days:證書過期時間,一定要加上這個參數,默認的證書過期時間是30天,一般我們不希望證書這么短就過期,所以寫上比較合適的天數,例如這里的3650(10年)。
事實上,這一行命令包含了好幾個步驟(我研究下面這些步驟的原因是我手頭已經由一個private_key.pem私鑰了,想直接用這個來生成x509證書,也就是用到了下面的2-3)
1)創建私鑰
openssl genrsa -out private_key.pem 1024
2)創建證書請求(按照提示輸入信息)
openssl req -new -out cert.csr -key private_key.pem
3)自簽署根證書
openssl x509 -req -in cert.csr -out public_key.der -outform der -signkey private_key.pem -days 3650
2.驗證證書。把public_key.der拖到xcode中,如果文件沒有問題的話,那麼就可以直接在xcode中打開,看到證書的各種信息。

第二步,使用public_key.der來進行加密。
1.導入Security.framework。
2.把public_key.der放到mainBundle中(一般直接拖到Xcode就行啦)。
3.從public_key.der讀取公鑰。
4.加密。
下面是參考代碼(只能用於加密長度小於等於116位元組的內容,適合於對密碼進行加密。使用了ARC,不過還是要注意部分資源需要使用CFRealse來釋放)
RSA.h
//
// RSA.h
//
#import Foundation.h>

@interface RSA : NSObject {
SecKeyRef publicKey;
SecCertificateRef certificate;
SecPolicyRef policy;
SecTrustRef trust;
size_t maxPlainLen;
}

- (NSData *) encryptWithData:(NSData *)content;
- (NSData *) encryptWithString:(NSString *)content;

@end

RSA.m
//
// RSA.m
//
#import "RSA.h"

@implementation RSA

- (id)init {
self = [super init];

NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key"
ofType:@"der"];
if (publicKeyPath == nil) {
NSLog(@"Can not find pub.der");
return nil;
}

NSDate *publicKeyFileContent = [NSData dataWithContentsOfFile:publicKeyPath];
if (publicKeyFileContent == nil) {
NSLog(@"Can not read from pub.der");
return nil;
}

certificate = SecCertificateCreateWithData(kCFAllocatorDefault, ( __bridge CFDataRef)publicKeyFileContent);
if (certificate == nil) {
NSLog(@"Can not read certificate from pub.der");
return nil;
}

policy = SecPolicyCreateBasicX509();
OSStatus returnCode = (certificate, policy, &trust);
if (returnCode != 0) {
NSLog(@" fail. Error Code: %ld", returnCode);
return nil;
}

SecTrustResultType trustResultType;
returnCode = SecTrustEvaluate(trust, &trustResultType);
if (returnCode != 0) {
NSLog(@"SecTrustEvaluate fail. Error Code: %ld", returnCode);
return nil;
}

publicKey = SecTrustCopyPublicKey(trust);
if (publicKey == nil) {
NSLog(@"SecTrustCopyPublicKey fail");
return nil;
}

maxPlainLen = SecKeyGetBlockSize(publicKey) - 12;
return self;
}

- (NSData *) encryptWithData:(NSData *)content {

size_t plainLen = [content length];
if (plainLen > maxPlainLen) {
NSLog(@"content(%ld) is too long, must < %ld", plainLen, maxPlainLen);
return nil;
}

void *plain = malloc(plainLen);
[content getBytes:plain
length:plainLen];

size_t cipherLen = 128; // 當前RSA的密鑰長度是128位元組
void *cipher = malloc(cipherLen);

OSStatus returnCode = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, plain,
plainLen, cipher, &cipherLen);

NSData *result = nil;
if (returnCode != 0) {
NSLog(@"SecKeyEncrypt fail. Error Code: %ld", returnCode);
}
else {
result = [NSData dataWithBytes:cipher
length:cipherLen];
}

free(plain);
free(cipher);

return result;
}

- (NSData *) encryptWithString:(NSString *)content {
return [self encryptWithData:[content dataUsingEncoding:NSUTF8StringEncoding]];
}

- (void)dealloc{
CFRelease(certificate);
CFRelease(trust);
CFRelease(policy);
CFRelease(publicKey);
}

@end

使用方法:
RSA *rsa = [[RSA alloc] init];
if (rsa != nil) {
NSLog(@"%@",[rsa encryptWithString:@"test"]);
}
else {
NSLog(@"init rsa error");
}

閱讀全文

與基於openssl文件加密系統相關的資料

熱點內容
取消壓縮管理的公司 瀏覽:116
打真軍的電影豆瓣 瀏覽:167
特斯拉app超級充電樁如何使用 瀏覽:422
男人懷孕電影袋鼠男人 瀏覽:507
如何刪去應用加密 瀏覽:468
服從命令聽指揮陌千依小說 瀏覽:761
《赤足驚魂》電影介紹 瀏覽:359
ic卡內數據如何傳到伺服器 瀏覽:21
安卓系統如何更改托盤 瀏覽:403
許志安演的電影有哪些 瀏覽:824
odbc文件夾是什麼 瀏覽:391
男主用鐵鏈囚禁女主的小說 瀏覽:914
sift演算法harris演算法 瀏覽:241
python命令行模式 瀏覽:459
新媽媽韓國電影中的輔導老師是誰 瀏覽:389
php郵箱驗證代碼 瀏覽:404
光貓偽裝命令 瀏覽:175
安卓高端機為什麼都用曲屏 瀏覽:419
老電影大全 戰爭片 瀏覽:971
有沒有小電影得網址網站 瀏覽:378