當前位置:首頁 » 密碼管理 » c文件流加密

c文件流加密

發布時間: 2023-03-13 09:23:56

① 請教BCB里的Base64加密有沒有能直接加密文件流的方法

下載 TomCrypt 通用加密庫
編譯出 Lib
--------------------------------------------------------------------
// 調用

String a = "";

File2Text(&a, "c:\\1.jpg");
Text2File("c:\\2.jpg", &a);
---------------------------------------------------------------------
// 功能實現,自己在函數內加上一些可靠性驗證也就差不多了

int __fastcall Bin2Text(String* OutText, TMemoryStream* pMS)
{
/* 二進制流數據轉換為 base64 碼 */

// 初始化輸出字元串
*OutText = "";
// 計算輸出字元串長度
unsigned long OutStringSize = 4 * (((unsigned long)pMS->Size + 2) / 3) + 1;
// 設置輸出字元串長度
OutText->SetLength( OutStringSize );
// 置內存流初始點
pMS->Position = 0;
// 開始轉換
int Result = base64_encode (
(unsigned char*)pMS->Memory, (unsigned long)pMS->Size,
(unsigned char*)OutText->c_str(), &OutStringSize );
// 返回轉換結果
return Result;
}
//---------------------------------------------------------------------------

int __fastcall File2Text(String *OutText, String Filename)
{
/* 輸入文件轉換為 base64 碼 */

// 創建內存流
TMemoryStream* pMS = new TMemoryStream;
// 載入文件
pMS->LoadFromFile(Filename);
// 置指針初始位置
pMS->Position = 0;
// 開始轉換,並將輸出內容保存到 OutText
int Result = Bin2Text(OutText, pMS);
// 刪除內存對象
delete pMS;
// 反饋結果
return Result;
}
//---------------------------------------------------------------------------

int __fastcall Text2File(String Filename, String* InText)
{
/* base64 碼轉換為 二進制文件 */

// 創建內存流
TMemoryStream* pMS = new TMemoryStream;
// 通過輸入的 base64 指針信息轉換為 二進制流
int Result = Text2Bin(pMS, InText);
// 置指針初始位值,保存文件
pMS->Position = 0;
pMS->SaveToFile(Filename);
// 刪除對象
delete pMS;
// 反饋結果
return Result;
}
//---------------------------------------------------------------------------

int __fastcall Text2Bin(TMemoryStream* pMS, String* InText)
{
/* base64 轉換為二進制流 */

// 獲得 base64 長度
unsigned long* pStrSize = new unsigned long;
*pStrSize = InText->Length();
// 獲得 base64 長度
unsigned long StrSize = InText->Length();
// 清除對象信息
pMS->Clear();
// 設置長度
pMS->Size = StrSize;
// 轉換
int Result = base64_decode (
(unsigned char*)InText->c_str(),
StrSize,
(unsigned char*)pMS->Memory,
pStrSize
);
// 重新設置實際長度
pMS->Size = *pStrSize;
// 刪除臨時對象
delete pStrSize;
// 置內存流初始位置
pMS->Position = 0;
// 反饋信息
return Result;
}
//---------------------------------------------------------------------------

c語言(文件的移位與加密解密)

這道題,並不難,只是樓主,沒有說清,是就字母移位嗎?
但是看你的例子,有不全是。
程序如下:
#include <stdio.h>
#include <stdlib.h>

FILE *source;//源文件
FILE *destination;//目標文件
int key;//密鑰
char file[100];//文件名
void encryption()//加密
{
char ch;
printf("請輸入要加密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("無法打開文件!\n");
exit(0);
}
printf("請輸入加密後的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("無法創建文件!\n");
exit(0);
}
printf("請輸入密鑰\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch+=key;
fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}

void decrypt()//解密
{
char ch;
printf("請輸入要解密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("無法打開文件!\n");
exit(0);
}
printf("請輸入加密後的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("無法創建文件!\n");
exit(0);
}
printf("請輸入密鑰\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch-=key;

fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}

int main()//主函數提供菜單
{
int choice=0;
printf("******************\n");
printf("1 文件加密\n");
printf("2 文件解密\n");
printf("3 退出\n");
printf("******************\n");
printf("請輸入1 2 3選擇操作\n");
scanf("%d",&choice);

switch(choice)
{
case 1:encryption();break;
case 2:decrypt();break;
case 3:break;
}
return 0;
}

③ 如何給c/c++源代碼加密

#include#include#includevoid findKey(char* key, char* mark){int len = strlen(key);int i = 0;int j = 0;memset(mark,0,26);for (i = 0; i 96){encrypt[i] = map[encrypt[i] - 97];}}outputFile = fopen("output.txt", "w+");fwrite(encrypt,nFileLen,1,outputFile);printf("加密的密文:%s\n", encrypt);fclose(outputFile);fclose(inputFile);free(encrypt);system("pause");return 0;}

④ 如何用C語言對文件進行加密和解密急求......................

文件分為文本文件和二進制文件。加密方法也略有不同。
1、文本文件
加密的主要是文本的內容,最簡單的方法就是修改文檔的內容,比如1.txt中的文件內容:
abcd
只要給每一個字元+1,就可以實現加密。文件內容即會變為
bcde

2、二進制文件加密
二進制文件加密也就是對應用程序加密,需要理解可執行文件格式,比如Windows平台的Exe文件它是PE結構,Linux上的可執行文件是ELF結構,要對這樣的程序進行加密,實際上是開發一種叫做「殼」的程序,這種程序的開發,需要將扎實的底層基礎,同時也需要對軟體加密解密有細致的理解,比如流行的vmprotect、z殼以及早些年的upx殼、aspack等等。

3、無論哪種加密都牽涉到文件操作的問題,使用C語言進行文件操作時,極少使用C標准庫中的I/O函數,大多數使用操作系統提供的內存文件映射相關的API函數,有興趣,可以搜索相關的資料。

⑤ C語言 文件異或加密

異或加密是所有加密中最容易實施且代碼量相對精簡的一種加密方式,其原理為任意數據被同一個值(key)兩次異或後,值不變。

這種特性,使得異或加密演算法的加解密流程是完全相同的,也就是說加解密可以用同一個函數實現。


一、演算法思路。

依次讀入文件字元,並用key值對其異或,結果輸入到目標文件中。

二、演算法描述。

1 打開源文件及目標文件。

2 獲取密鑰值(key)。

3 讀入一個字元。

4 對其進行異或計算。

5 結果寫入目標文件。

6 重復3-5直到文件結尾。

7 關閉文件。

三、代碼實現。

為使代碼簡潔易懂,輸入文件設定為in.txt, 輸出文件設定為out.txt, key值設定為0x5C。

假定所有文件及目錄可讀寫。

#include<stdio.h>
#defineIN"in.txt"
#defineOUT"out.txt"
#defineKEY0x5C
voidscrambler(constchar*in,constchar*out,unsignedcharkey)
{
FILE*i,*o;
intc;

i=fopen(in,"rb");
o=fopen(out,"wb");//打開文件,因為假定可讀寫,所以對是否成功不做判斷
while((c=fgetc(i))!=EOF)//讀入字元直到文件結尾
{
c^=key;//執行異或加密或解密
fputc(c,o);//寫入文件
}

fclose(i);
fclose(o);
}

intmain()
{
scrambler(IN,OUT,KEY);
return0;
}

但是異或加密也是有缺陷的。最大的缺陷是加密操作是二進制層面的,獲取到的加密文件大部分將是不可讀的亂碼。這也是為什麼在打開文件的時候要以二進制方式的原因。

鑒於此,在此不便給出測試樣例及輸入輸出,可自行調試。

⑥ C語言程序前怎麼加密碼

這個簡單

這就就是加密函數
intpassword()
{
intn=0,a=0;
charmi1[80];
inti=0,a1,a2,a3;
intindex=0,m=0;
charstr[30];
charuser[12];
do{
printf(" ************************howareyou***************************** ");
printf(" pleaseinputtheusername:");
scanf("%s",user);
a1=strcmp(user,"20085126");
if(a1==0)
{
FILE*f1;
if((f1=fopen("1mi.txt","rt"))==NULL)
{
printf("!");
exit(0);
}
rewind(f1);//重定向文件內部指針將文件內部的位置指針重新指向一個流(數據流/文件)的開頭
fgets(mi1,7,f1);

do{
printf(" pleaseinputthepassword:");
scanf("%s",str);
printf(" ");
if(!strcmp(str,user))/*比較密碼是否一樣*/
m=1;

index++;
if(index>3)
{
printf(" ***************************************************** ");
printf(" ,exitsystem! ");
printf(" ***************************************************** ");
return0;
}

}while(m==0);
fclose(f1);
}
}
}

睿爾科技
更新學習資料
http://weibo.com/cdreer

⑦ 用C語言設計一個文件加密與解密程序

c語言文件加密和解密方法如下:

1、首先打開VC++6.0;


4、聲明頭文件

#include<stdio.h>

#include<stdlib.h>

#include<string.h>


首先寫個加密函數,演算法就是簡介里說的;

voidEncryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
if(sfp==0||dfp==0)
{
printf("ERROR! ");
return;
}
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=(ch-'a'+1)%26+'a';
ch=ch^pwd;
}
if((ch>='A')&&(ch<='Z'))
{
ch=(ch-'A'+1)%26+'A';
ch=ch^pwd;
}
fputc(ch,dfp);
}
}

寫解密子函數:與加密的過程相反;

voidDecryptFile(FILE*sfp,FILE*dfp,charpwd)
{
charch;
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=ch^pwd;
ch=(ch-'a'+25)%26+'a';
}
if((ch>='A')&&(ch<='Z'))
{
ch=ch^pwd;
ch=(ch-'A'+25)%26+'A';
}
fputc(ch,dfp);
}
}

輸出函數,輸出文件內容
voidOutputFile(FILE*fp)
{
charch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}
主函數,主要調用這幾個函數
intmain()
{
/*用戶輸入的要加密的文件名*/
charsfilename[20];
/*用戶輸入加密後保存的文件名*/
chardfilename[20];
/*用來保存密碼字元*/
charpwd;
FILE*sfp,*dfp;

printf(": ");
/*得到要加密的文件名*/
gets(sfilename);
/*得到加密後你要的文件名*/
printf(": ");
gets(dfilename);
/*得到加密字元*/
printf("PleaseinputyourPassword: ");
//scanf("%c",&pwd);
pwd=getch();
/*屏幕以*來表示輸入的加密字元*/
printf("* ");
/*以只讀方式打開要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can'topenthefile:%s ",sfilename);
exit(0);
}
/*輸出要加密的文件*/
printf(": ");
OutputFile(sfp);
/*建立加密後的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can'topenorcreatethefile:%s ",dfilename);
//exit(0);
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET);
EncryptFile(sfp,dfp,pwd);
printf(" Encryptedthefilesuccessfully! ");
/*輸出加密後的文件*/
printf(": ");
fseek(dfp,0L,SEEK_SET);
OutputFile(dfp);
fclose(sfp);
fclose(dfp);
getch();
return0;
}

熱點內容
access腳本 發布:2025-05-19 23:38:54 瀏覽:219
硬碟內存儲盤材質 發布:2025-05-19 23:38:53 瀏覽:716
五台電腦伺服器配置 發布:2025-05-19 23:33:05 瀏覽:277
蘋果愛奇藝後台緩存 發布:2025-05-19 23:32:01 瀏覽:59
perl復制文件夾 發布:2025-05-19 23:31:19 瀏覽:293
linux用戶空間與內核空間 發布:2025-05-19 23:26:59 瀏覽:801
python條件與 發布:2025-05-19 23:26:56 瀏覽:188
python回測框架 發布:2025-05-19 23:19:28 瀏覽:725
單片機的壓縮演算法 發布:2025-05-19 23:18:06 瀏覽:274
電腦怎麼配置桌面分區 發布:2025-05-19 23:15:23 瀏覽:656