1、实现文件中的文字加密
1、判断加密还是解密(加密:"a" 解密:"e")
>> 加密:1>打开文件;
2>读取文件内容(判断是否读取完成);
3>遍历读取的每个字节数据进行加密操作(a一个字符)
4>调整书签到上一次读取的位置
5>将加密后的数据写回文件
6>关闭文件。
>> 解密: 1>打开文件;
2>读取文件内容(判断是否读取完成);
3>遍历读取的每个字节数据进行解密操作(e一个字符)
4>调整书签到上一次读取的位置
5>将加密后的数据写回文件
6>关闭文件。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *pt1=fopen("src.txt","r+");
char arr[100]={0};
while(1)
{
if (!strcmp(argv[1],"a"))
{
int k=fread(arr,1,100,pt1);
fseek(pt1,-k,SEEK_CUR);
if(k==0){
fclose(pt1);
break;
}
for (int i = 0; i < k; i++)
{
if(arr[i]=='\n'){
char arr1=arr[i];
fputc(arr1,pt1);
}
else{
char arr1=arr[i]+12;
fputc(arr1,pt1);
}
}
}
else if(!strcmp(argv[1],"e"))
{
int k1=fread(arr,1,100,pt1);
fseek(pt1,-k1,SEEK_CUR);
if(k1==0){
fclose(pt1);
break;
}
for (int i = 0; i < k1; i++)
{
if(arr[i]=='\n'){
char arr1=arr[i];
fputc(arr1,pt1);
}
else{
char arr1=arr[i]-12;
fputc(arr1,pt1);
}
}
}
}
return 0;
}
2、图片打码。
注意:图片的前几十位字节一般为图片信息,而且需要重视的是注意这个图片是镜像,还是正像(就是图的信息位,如下我才用的图片就是信息位在右下角,右下角才是开始坐标,为(0,0),我的是镜像)。
还需注意的是图片必须是H=W或者H、W都是5,10的倍数等或者H、W必须成比例,若不是则会导致打的码是平行四边形(倾斜的),因为其中需要注意的还是图的信息位。
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include<fcntl.h>
#define H 256
#define W 256
int main(int argc, char *argv[])
{
char buf[H][W*3],tmp;
int fd=open("liao.bmp",O_RDWR);
if(-1==fd)
{
perror("open");
return -1;
}
read(fd,buf,H*W*3);
for (int i =1; i <252; i+=5)//注意第一行必须舍弃,因为其中包含了图的信息位,一旦修改则无法打开图片。
{
for (int j =0; j <754; j+=15)
{
char arr[3]={buf[i][j],buf[i][j+1],buf[i][j+2]};
for (int n =i; n <i+5; n++)
{
for (int m =j; m <j+15; m+=3)
{
buf[n][m]=arr[0];
buf[n][m+1]=arr[1];
buf[n][m+2]=arr[2];
}
}
}
}
lseek(fd,0,SEEK_SET);
write(fd,buf,H*W*3);
close(fd);
return 0;
}