怎么用C语言给文件设置密码
发布时间:2025-05-13 00:21:37 发布人:远客网络
一、怎么用C语言给文件设置密码
对于加密要求不高的完全可以自己定义规则来进行加密。这种加密是很简单很自由的,例如你在存文件的时候可以将文件中的每个字符都加上一个数,然后读取该文件的时候再每个字符相应地减去那个数,即可实现就简单的加密,这样你储存的文件看上去就是乱码了。只是这个规则太简单,规则你可以自己定,加密与解密对着来就行了。
二、C语言邮件程序 如何发送附件
#pragmacomment(lib,"ws2_32.lib")
//协议中加密部分使用的是base64方法
voidEncodeBase64(char*dbuf,char*buf128,intlen);
voidSendMail(char*email,char*body);
intOpenSocket(structsockaddr*addr);
charEmailTo[]="xushiladeng@qq.com";
charEmailContents[]="From:\"lucy\"<xushiladeng@qq.com>\r\n"
"To:\"dasiy\"<xushiladeng@qq.com>\r\n"
//"DATA\r\n"//告诉服务器下面是邮件
"X-Mailer:fice'smailer\r\n"
"Content-Type:multipart/mixed;boundary=\"#BOUNDARY#\"\r\n\r\n"//设置边界值,区分邮件内容的两个回车换行
"Content-Transfer-Encoding:7bit\r\n\r\n"
"Thisisamulti-partmessageinMIMEformat\r\n\r\n"
"Content-Type:text/plain;charset=gb2312\r\n"
"Content-Transfer-Encoding:printable\r\n\r\n"
"SMTP协议测试:发送附件/n----byfice2015.04.20\r\n"
"Content-Type:text/plain;name=student.txt\r\n"
"Content-Transfer-Encoding:base64\r\n"
"Content-Disposition:attachment;filename=\"test.txt\"\r\n\r\n";
SendMail(EmailTo,EmailContents);
voidEncodeBase64(char*dbuf,char*buf128,intlen)
dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1);
dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2);
dbuf[(i-1)*4+2]=ConvertToBase64((unsignedint)ddd->d3);
dbuf[(i-1)*4+3]=ConvertToBase64((unsignedint)ddd->d4);
dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1);
dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2);
dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1);
dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2);
dbuf[(i-1)*4+2]=ConvertToBase64((unsignedint)ddd->d3);
voidSendMail(char*email,char*body)
structsockaddr_intheir_addr={0};
WSAStartup(MAKEWORD(2,2),&WSAData);
memset(&their_addr,0,sizeof(their_addr));
their_addr.sin_family=AF_INET;
their_addr.sin_port=htons(25);
hostent*hptr=gethostbyname("smtp.126.com");
memcpy(&their_addr.sin_addr.S_un.S_addr,hptr->h_addr_list[0],hptr->h_length);
printf("IPofsmpt.126.comis:%d:%d:%d:%d\n",
their_addr.sin_addr.S_un.S_un_b.s_b1,
their_addr.sin_addr.S_un.S_un_b.s_b2,
their_addr.sin_addr.S_un.S_un_b.s_b3,
their_addr.sin_addr.S_un.S_un_b.s_b4);
//连接邮件服务器,如果连接后没有响应,则2秒后重新连接
sockfd=OpenSocket((structsockaddr*)&their_addr);
while(recv(sockfd,rbuf,1500,0)==0)
cout<<"reconnect..."<<endl;
sockfd=OpenSocket((structsockaddr*)&their_addr);
sprintf_s(buf,1500,"EHLOHYL-PC\r\n");
send(sockfd,buf,strlen(buf),0);
cout<<"EHLOREceive:"<<rbuf<<endl;
sprintf_s(buf,1500,"AUTHLOGIN\r\n");
send(sockfd,buf,strlen(buf),0);
cout<<"AuthLoginReceive:"<<rbuf<<endl;
sprintf_s(buf,1500,"xushiladeng@qq.com");//你的邮箱账号
EncodeBase64(login,buf,strlen(buf));
sprintf_s(buf,1500,"%s\r\n",login);
send(sockfd,buf,strlen(buf),0);
cout<<"Base64UserName:"<<buf<<endl;
cout<<"UserLoginReceive:"<<rbuf<<endl;
sprintf_s(buf,1500,"********");//你的邮箱密码
EncodeBase64(pass,buf,strlen(buf));
sprintf_s(buf,1500,"%s\r\n",pass);
send(sockfd,buf,strlen(buf),0);
cout<<"Base64Password:"<<buf<<endl;
cout<<"SendPasswordReceive:"<<rbuf<<endl;
sprintf_s(buf,1500,"MAILFROM:<xushiladeng@qq.com>\r\n");
send(sockfd,buf,strlen(buf),0);
cout<<"setMailFromReceive:"<<rbuf<<endl;
sprintf_s(buf,1500,"RCPTTO:<%s>\r\n",email);
send(sockfd,buf,strlen(buf),0);
cout<<"TellSendtoReceive:"<<rbuf<<endl;
sprintf_s(buf,1500,"DATA\r\n");
send(sockfd,buf,strlen(buf),0);
cout<<"SendMailPrepareReceive:"<<rbuf<<endl;
//发送邮件内容,\r\n.\r\n内容结束标记
sprintf_s(buf,1500,"%s\r\n.\r\n",body);
send(sockfd,buf,strlen(buf),0);//发送邮件,不带附件的内容
//用二进制方式读取附件文件内容并转为base64格式
FILE*pf=fopen("D:\\test.txt","rb");
char*filebuf=(char*)malloc(filelen);
char*filebase64=(char*)malloc(filelen*2);
memset(filebase64,0,filelen*2);
EncodeBase64(filebase64,filebuf,filelen);
send(sockfd,filebase64,strlen(filebase64),0);//发送邮件的内容
cout<<"SendMailReceive:"<<rbuf<<endl;
sprintf_s(buf,1500,"QUIT\r\n");
send(sockfd,buf,strlen(buf),0);
cout<<"QuitReceive:"<<rbuf<<endl;
intOpenSocket(structsockaddr*addr)
sockfd=socket(PF_INET,SOCK_STREAM,0);
cout<<"Opensockfd(TCP)error!"<<endl;
if(connect(sockfd,addr,sizeof(structsockaddr))<0)
cout<<"Connectsockfd(TCP)error!"<<endl;
三、在pic中如何用C语言编写程序
//通过按键校时:K10--小时,K11--分钟,K12--秒(归零),K13-星期,BR1--年,RB2--月,RB3--日。
#include<pic.h>//包含单片机内部资源预定义
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
#define i_o RB4//定义DS1302的数据口
#define sclk RB0//定义DS1302的时钟口
#define rst RB5//定义DS1302的复位口
# define DQ RA0//定义18B20数据端口
unsigned char TLV=0;//采集到的温度高8位
unsigned char THV=0;//采集到的温度低8位
unsigned char shifen;//十分位
const char table2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char rx_data,read_data,count,sec,min,hour,day,mon,week,year,time;
//----------------------------------------------
//------------------------------------------------
//------------------------------------------------
//其指令时间为:7+(3*(Y-1)+7)*(X-1)如果再加上函数调用的call指令、页面设定、传递参数花掉的7个指令。
//则是:14+(3*(Y-1)+7)*(X-1)。
//***************************************
TRISA0=1;//释放总线等电阻拉高总线,并保持15~60us
if(DQ==1) presence=1;//没有接收到应答信号,继续复位
else presence=0;//接收到应答信号
//*****************************************************
void ds18b20_write_byte(unsigned char code)
if(k) DQ=1;//写1则拉高数据电平
delay1(3);//延时42us,ds18b20对数据线采样
TRISA0=1;//采样结束,释放总线,拉高电平
//****************************************************
unsigned char ds18b20_read_byte()
DQ=0;//数据线拉低再拉高产生读时间片
if(DQ) k=k|0x80;//15us内要完成读位
delay1(6);//延时72us后释放总线
//********************************************
ds18b20_init();//复位等待从机应答
ds18b20_write_byte(0XCC);//忽略ROM匹配
ds18b20_write_byte(0X44);//发送温度转化命令
display();//调用多次显示函数,确保温度转换完成所需要的时间
ds18b20_init();//再次复位,等待从机应答
ds18b20_write_byte(0XCC);//忽略ROM匹配
ds18b20_write_byte(0XBE);//发送读温度命令
TLV=ds18b20_read_byte();//读出温度低8
THV=ds18b20_read_byte();//读出温度高8位
temp=(~t+1)*0.0625*10+0.5;//负温度时,取反加1再乘以0.0625得实际温度,乘10+0.5显示小数点一位,且四舍五入
temp=t*0.0625*10+0.5;//正温度
bai='-';//负温度时百位显示负号
bai=(const) temp/1000+0x30;//百位
shi=((const) temp%1000)/100;//十位
ge=((const) temp%1000)%100/10;//个位
shifen=((const) temp%1000)%100%10;//十分位
//---------------------------------------------
//------------DS1303部分-----------------------
//---------------------------------------------
void write_byte(unsigned char data)
for(j=0;j<8;j++)//连续写8bit
if(data&0x01)//判断待发送的数据位是0或1
data=data>>1;//待发送的数据右移1位
sclk=0;//写完一个字节,拉低时钟信号
//---------------------------------------------
TRISB4=1;//设置数据口方向为输入
rx_data=rx_data>>1;//接收寄存器右移1位
if(i_o==1) rx_data=rx_data|0x80;
TRISB4=0;//恢复数据口方向为输出
return(rx_data);//返回读取到的数据
//----------------------------------------------
void write_ds1302(unsigned char addr,unsigned char code)
//-------------------------------------------
void read_ds1302(unsigned char addr)
//---------------------------------------------
write_byte(0xbf);//发送多字节读取命令
for(i=0;i<7;i++)//连续读取7个字节数据
table1[i]=read_byte();//调用读取1个字节数据的函数
write_ds1302(0x8e,0);//发控制命令
//---------------------------------------------
//定义待设置的时间:秒、分、时、日、月、星期、年、控制字
const char table[]={0x00,0x00,0x12,0x23,0x10,0x05,0x09,0x00};
write_byte(0xbe);//时钟多字节写命令
for(i=0;i<8;i++)//连续写8个字节数据
write_byte(table[i]);//调用写一个字节函数
//-------------------------------------------
void two_to_ten(unsigned char i)
time=(table1[i]&0x0f)+(table1[i]>>4)*0x0a;
//-------------------------------------------
void ten_to_bcd(unsigned char i)
time=((i/0x0a)<<4)|(i%0x0a);
//------------------------------------------
else if(RC2==0)//改变分位--k11
two_to_ten(1);//BCD码转换成十进制数
ten_to_bcd(min);//十进制数转换为BCD码存进DS1302
else if(RC3==0)//改变小时位--k10
two_to_ten(2);//BCD码转换成十进制数
two_to_ten(4);//BCD码转换成十进制数
two_to_ten(3);//BCD码转换成十进制数
if((table1[6]%4==0)&&(table1[4]==2)&&(day>=30))//润年2月
else if(((table1[6]%4)!=0)&&(table1[4]==2)&&(day>=29))//非润年的2月
else if(((table1[4]==1)||(table1[4]==3)||(table1[4]==5)||(table1[4]==7)||(table1[4]==8)||(table1[4]==0x10)||(table1[4]==0x12))&&(day>=32))
else if(((table1[4]==4)||(table1[4]==6)||(table1[4]==9)||(table1[4]==0x11))&&(day>=31))
two_to_ten(6);//BCD码转换成十进制数
//****************************************
//**************lcd1602*******************
//****************************************
//****************************************
void write_lcd(unsigned char code)
//****************************************
void lcd_enable(unsigned char code)
//*****************************************
lcd_enable(0x38);//设置16X2显示,5X7点阵
lcd_enable(0x0c);//开显示,不显示光标
//-------------------------------------------
write_lcd((table1[2]>>4)+0x30);
write_lcd((table1[2]&0x0f)+0x30);
write_lcd((table1[1]>>4)+0x30);
write_lcd((table1[1]&0x0f)+0x30);
write_lcd((table1[0]>>4)+0x30);
write_lcd((table1[0]&0x0f)+0x30);
// PORTD=0X8e;//显示'C'
write_lcd((table1[6]>>4)+0x30);
write_lcd((table1[6]&0x0f)+0x30);
write_lcd((table1[4]>>4)+0x30);
write_lcd((table1[4]&0x0f)+0x30);
write_lcd((table1[3]>>4)+0x30);
write_lcd((table1[3]&0x0f)+0x30);
write_lcd((table1[5]&0x0f)+0x30);
//--------------------------------------------
ADCON1=0X06;//设置A口为普通I/O口
TRISC=0XEF;//RC3输出,其他为输入
//----------------------------------------------
port_init();//调用引脚初始化函数
read_ds1302(0x81);//查看DS1302是否起振
if(read_data&0x80)//否,则初始化DS1302
ds1302_init();//调用DS1302初始化函数
set_time();//调用设置时间函数
get_temp();//调用温度转换函数