c文件流加密
① 请教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;
}