埃特巴什码(Atbash Chiper)是一个系统:最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。
在罗马字母表中,它是这样出现的:
常文: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
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
比如愤怒英文是Anger
埃特巴什码就是Zmtui
如果埃特巴什码正好也是英文词语最好,我打的愤怒是没有对照的单词的
密文:M L K J I H G F E D C B A。
埃特巴什码是一个系统:最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。
在罗马字母表中,它是这样出现的:
常文:a b c d e f g h i j k l m
密文:Z Y X W V U T S R Q P O N
常文:n o p q r s t u v w x y z
埃特巴什解密来源:
这种密码是由熊斐特博士发现的。熊斐特博士为库姆兰《死海古卷》的最初研究者之一,他在《圣经》历史研究方面最有名气的著作是《逾越节的阴谋》。
他运用这种密码来研究别人利用其他方法不能破解的那些经文。这种密码被运用在公元1世纪的艾赛尼/萨多吉/拿撒勒教派的经文中,用以隐藏姓名。
切片即可。
将密文的每一个单词word,使用word[::-1]得到明文。
反之亦然。
例如:
s='This is a ciphertext'
print(' '.join(map(lambda _:_[::-1],s.split(' '))))
/*你说的埃特巴什码(Atbash Chiper)是不是这种:最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。也就是A转成Z,X转成C*/
/*如果是这样的,那他的加解密函数应该是同一个,你可以用我下面的代码来实现*/
#includeiostream
#includestring
using namespace std;
string Conversion(string s)
{
string ss;
for(int i=0; is.length(); i++)//扫描每个字符
{
char m = s.at(i);//取出每个字符
if(isalpha(m))//是字母则转换
{
//大小写字母各中分,共分成四组
if(m=65 m=77)//A~M
{
m = m + 25 - (m-65)*2;
}
else if(m=78 m=90)//N~Z
{
m = m - 25 + (90-m)*2;
}
else if(m=97 m=109)//a~m
{
m = m + 25 - (m-97)*2;
}
else//n~z
{
m = m - 25 + (122-m)*2;
}
}
char *k = m;
ss += *k;//形成新的字符串
}
return ss;
}
void main()
{
string s;
//输入完成后需要按两次回车,是因为getline这个函数内部的BUG问题,对程序没影响
getline(cin,s,'\n');
coutConversion(s)endl;
}