Linux命令行文本加密的小技巧
我在学习shell攻略时了解到了这个方法,感觉简单有趣,所以现在把它整理出来和大家分享。
ROT13文本编码
介绍
ROT13(回转13位,rotateby13places,有时中间加了个减号称作ROT-13)是一种简易的置换暗码。把 ROT13 称为“加密”是大方的,“文本模糊处理”更准确些。有时候它被用来隐藏文本中潜在的攻击内容。
原理
套用ROT13到一段文字上仅仅只需要检查字元字母顺序并取代它在13位之后的对应字母,有需要超过时则重新绕回26英文字母开头即可。A换成N、B换成O、依此类推到M换成Z,然后序列反转:N换成A、O换成B、最后Z换成M。只有这些出现在英文。因为移动的位数是可能的 26 个字符的一半,所以对文本再次执行这个算法,就恢复到了它最初的形式。
在命令行使用
tr命令
1. 功能: tr命令,其全称“Text Replacer”,该命令用于进行文本替换。从标准输入中通过替换或删除操作进行字符转换。 tr主要用于删除文件中控制字符或进行字符转换。
2. 选项:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
实例
- 加密:
- 解密:
代码实现
具体代码
/************************************************************************* > File Name: rot13.c > Author: AnSwEr > Mail: 1045837697@qq.com > Created Time: 2015年08月18日 星期二 12时02分28秒 ************************************************************************/
/* * realize ROT13 by C */
#include<stdio.h>
#include<string.h>
#define MAXSIZE 1024
char *rot13(char * string,unsigned int len)
{
char *str = string;
int i;
for(i = 0;i < len - 1;i++)
{
if(str[i] >= 'a'&&str[i] <= 'z')
str[i] = 'a' + (str[i] - 'a' + 13) % 26;
if(str[i] >= 'A'&&str[i] <= 'Z')
str[i] = 'A' + (str[i] - 'A' + 13) % 26;
}
return str;
}
int main(void)
{
char str_old[MAXSIZE];
char *str_new;
unsigned int length;
printf("Please input your string you want to encrypt by ROT13:\n");
fgets(str_old,sizeof(str_old),stdin);
length = strlen(str_old);
/*encrypt*/
str_new=rot13(str_old,length);
printf("After encrypt,string is:\n");
fputs(str_new,stdout);
/*decrypt*/
length = strlen(str_new);
str_new=rot13(str_new,length);
if(strcmp(str_new,str_old) == 0)
printf("Decrypt successfully!\n");
else
printf("Decrypt failed!\n");
printf("After decrypt,string is:\n");
fputs(str_new,stdout);
return 0;
}
运行截图
反馈与建议
- 微博:@AnSwEr不是答案
- github:AnSwErYWJ
- 博客:AnSwEr不是答案