您当前的位置:首页 > 互联网教程

怎么用C语言给文件设置密码

发布时间:2025-05-13 00:21:37    发布人:远客网络

怎么用C语言给文件设置密码

一、怎么用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();//调用温度转换函数



相关内容FAQs: