❶ 凯撒密码为一种替换密码,此题的加密过程为先进行base64编码,再进行移
在密码学中,恺撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
恺撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为: E(x) = (x + n) mod 26.
解密就是:
D(x) = (x - n) mod 26.
显而易见,一旦确定了某两个字母的对应关系(即n的值),这种移位密码很容易被破解。
因此,为了使密码有更高的安全性,单字母替换密码就出现了。
明码表:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密码表:T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
但是这种加密方式依然可以破解,根据字母使用频度表,分析密文中的字母频率,将其对照即可破解。
不仅如此,凯撒加密对加密数据也是有要求的,一般情况下,它只支持对基本的英文字母进行加密,如果对中文等亚太地区的文字进行加密,结果可想而知,你的隐私将毫无保留的出现在众人面前。有人说,我们可以扩展这个算法,使它支持所有的文字,这么做是可行的,如果采用同余式的方式实现,代码几乎不怎么需要改动,只要字符集本身是Unicode就可以了。但是这种加密的安全性很难满足应用的要求。如果采用单字母替换的方式,程序将需要构建两个巨大的字符数组去保存他们的映射关系,而且扩展性也不好,当然也是不可行的。这样看来,凯撒加密岂不是一无是处了,其实对于一般的应用,凯撒加密还是足以应付的,只要我们对它稍作改进。
❷ 古典古典密码算法实现-替换密码-转换密码
package cn.h.e.encrypt;
/*
* 古典密码算法之 替代算法
*
*/
public class Replace {
//当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR
private final static int CRYPT_OK = 1;
private final static int CRYPT_ERROR = 0;
//设定一共有26个可用字母 字母a的编码是97
private final static int totalLetter = 26;
private final static int key = 3;
/*
* @param initCode 没有加密前的字符串
* @CRYPT_OK 加密成功
* @CRYPT_ERROR 加密失败
*/
public static int encrypt(String initCode)throws Exception{
//用来输出加密后的字符
StringBuilder sb = new StringBuilder();
for(int i = 0; i < initCode.length(); i++ ){
int initCodeVal = initCode.charAt(i ) - 96;
int targetCodeVal = (initCodeVal + key ) % totalLetter;
if(targetCodeVal == 0) targetCodeVal = 26;
char targetCode = (char)(targetCodeVal +96);
sb.append(targetCode );
}
//以下就是加密后的字符
String targetCode = sb.toString();
System.out.println(targetCode);
return CRYPT_OK;
}
/*
* @param targetCode 加密前的字符串
* @CRYPT_OK 解密成功
* @CRYPT_ERROR 解密失败
*/
public static int decrypt(String targetCode)throws Exception{
//用来输出解密后的字符
StringBuilder sb = new StringBuilder();
for(int i = 0; i < targetCode.length(); i++ ){
int targetCodeVal = targetCode.charAt(i ) - 96;
//如果已经来到了字母表的开头 给他还回去
if(targetCodeVal <= key) targetCodeVal += 26;
int initCodeVal = targetCodeVal - key;
char initCode = (char)(initCodeVal + 96);
sb.append(initCode );
}
//以下就是解密后的字符
String initCode = sb.toString();
System.out.println(initCode);
return CRYPT_OK;
}
❸ 密码学中同音替换法是什么
……听着名字 我猜是把字用相同读音的其他字换掉吧
比如“游泳”换成“尤勇”
❹ 密码学的做2个题目!
古典密码:1、Hill体制 2、维吉尼亚体制 3、双字的Playfair体制 4、CAESAR体制 5、双字的Playfair体制 6.古典加密方法 7.代替密码 8多名码代替 9多音码代替 10换位密码 多表代替 密本
❺ 替换式密码的介绍
替换式密码,又名取代加密法,是密码学中按规律把文字加密的一种方式。替换式密码中可以用不同的字母数为单元,例如每一个或两个字母为一单元。密文接收者解密时需用原加密方式解码才能获得原文本。由于英语中替换式密码会把26个字母拆开,使用替换式密码较为容易;相反,中文需要建立密码本,然后遂字替换。然而由于中文字极多,完全替换不合经济效益。而且中文中每个字由不同大小的字根来组字,较难转换,因此使用替换式密码的示例比较少。当以替换式密码与置换式密码(英语:Transposition cipher)(或称转位式密码或移转式密码1)相比较时,会发现转位式密码只是把明文中的单元的位置改变,而单元本身没有作出改变;相反,替换式密码只是把单元转换,但密文中单元的位置没有改变。替换式密码亦有许多不同类型。如果每一个字母为一单元(或称元素)进行加密操作,就可以称之为“简易替换密码”(英语:simplesubstitution cipher)或“单表加密”(英语:monoalphabeticcipher)又称为单字母替换加密;字母群体为单元的加密则称为“多表加密”(英语:polyalphabeticcipher)或“表格式加密”(英语:polygraphic)。单表加密只可在一个单元中使用同一种替换加密,而多表加密则可在一个单元使用不同的加密方式,明文单元映射到密文上可以有好几种可能性,反之亦然。
❻ 密码学方面的习题不会做。。
汗,那么多题目不会做,都很基础的题目,自觉点把书看一下吧,书上例题差不多的.