栅栏易位法。即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码。撒移位密码。也就是一种最简单的错位法,将字母表前移或者后错几位。进制转换密码。比如给你一堆数字,乍一看头晕晕的,你可以观察数字的规律,将其转换为10进制数字,然后按照每个数字在字母表中的排列顺序,拼出正确字母。摩尔斯密码。翻译不同,有时也叫摩尔密码。*表示滴,-表示哒,如下表所示比如滴滴哒就表示字母U,滴滴滴滴滴就表示数字5。另外请大家不要被滴哒的形式所困,我们实际出密码的时候,有可能转换为很多种形式,例如用0和1表示,迷惑你向二进制方向考虑,等等。摩尔斯是我们生活中非常常见的一种密码形式,例如电报就用的是这个哦。下次再看战争片,里面有发电报的,不妨自己试着破译一下电报。维热纳尔方阵。上面所说的频率分析,很容易破解较长篇幅的密文,于是维热纳尔继承前人的经验,创造出了这个维热纳尔方阵,从而克服了词频分析轻易能够破解密码的弊端,成为一种较为强大的密码编译形式。字母频率密码。关于词频问题的密码,词频法其实就是计算各个字母在文章中的出现频率,然后大概猜测出明码表,最后验证自己的推算是否正确。这种方法由于要统计字母出现频率,需要花费时间较长,本人在此不举例和出题了,有兴趣的话,参考《跳舞的小人》和《金甲虫》。
java.security.MessageDigest类提供了MD5 SHA等等主流的很多加密算法直接可以调用,你搜一下就有了
简单的异或加密,自己不写是损失
==========
#include cstdio
using namespace std;
void binByte(char *bin, unsigned char b){
char i=7;
while(b0){
bin[i]=(b1)+'0';
b=1;
i--;
}
while(i=0){
bin[i--]='0';
}
}
int main()
{
char *src="NCTV";
char bin[9]={0};
unsigned char *p=(unsigned char*)src;
unsigned char pwd=0x59;//1011001
unsigned char code;
while(*p!='\0'){
code=*p^pwd;
binByte(bin,*p);
printf("%c %u %s 加密成 %u ",*p,*p,bin,code);
binByte(bin,code);
printf("%s 解密成",bin);
code^=pwd;
binByte(bin,code);
printf(" %c %u %s",code,code,bin);
printf("\n");
p++;
}
return 0;
}
==============
输出:
N 78 01001110 加密成 23 00010111 解密成 N 78 01001110
C 67 01000011 加密成 26 00011010 解密成 C 67 01000011
T 84 01010100 加密成 13 00001101 解密成 T 84 01010100
V 86 01010110 加密成 15 00001111 解密成 V 86 01010110
========