我记得有一种加密方法,就是选取一个字母组合作为开始,按照这个字母的顺序,对应于,ABCDEFG等等。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我记得有一种加密方法,就是选取一个字母组合作为开始,按照这个字母的顺序,对应于,ABCDEFG等等。相关的知识,希望对你有一定的参考价值。

看我这个例子,譬如:我选择CUT作为开始,那么对应的字母表为:CUTABDEFGHIJKLMNOPQRSVWXYZ.这个就是密码表,然后对照与26个字母的位子,我编译了HBZG这个明文,那么对应的密码就是:“juzi”,我说的就是这种加密方法,请问一下,这种加密方法叫什么啊?拜托大家乐了。

参考技术A 是叫摩尔斯密码(不确定诶) 参考技术B playfair密码
算法描述:Playfair密码出现于1854年,它依据一个5*5的正方形组成的密码表来编写,密码表里排列有25个字母。如果一种语言字母超过25个,可以去掉使用频率最少的一个。如,法语一般去掉w或k,德语则是把i和j合起来当成一个字母看待。英语中z使用最少,可以去掉它。
加密描述:第一步是编制密码表。在这个5*5的密码表中,共有5行5列字母。第一列(或第一行)是密钥,其余按照字母顺序。密钥是一个单词或词组,若有重复字母,可将后面重复的字母去掉。当然也要把使用频率最少的字母去掉。如:密钥是Live and learn,去掉后则为liveandr。如果密钥过长可占用第二列或行。

参考资料:http://baike.baidu.com/view/2689788.htm

算法学习

1.Caesar Shift Cipher(密码)

说明:密码学是编程中最有趣的分支之一。研究它的算法通常以一种简单的方法开始,这个方法是以著名的罗马皇帝凯撒大帝命名的,他用这个方法来传达他的军事秘密。

我们将在这个问题中练习解密加密消息。这个算法的想法很简单。原文的每一个字母都被另一个字母替换。

下面的规则是:
1.找到字母表里的字母(应该是加密的);

2.进一步移动K位置(在字母表中);

3.从这里拿新信;

4.如果“移动”遇到了算法的结束位置,那么从它的开始就可以继续。

例如,如果K=3,这样A对应D,B对应E,W对应Z,Z对应C,如下表:

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

| | | | | | | | | | | | | | | | | | | | | | | | | |
V V V V V V V V V V V V V V V V V V V V V V V V V V 

D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
所有当信息为 VENI VIDI VICI.时,被编码为 YHQL YLGL YLFL.
另一方面,加密的信息应该被“移回去”解码,或者是26-K的移动,这是相同的。
因此,如果我们有编码的消息 HYHQ BRX EUXWXV,我们可以应用26-K=26-3=23的转换,找到原始文本,即是 EVEN YOU BRUTUS.
Input data 将包含两个整数-加密文本行和的 K 值的数量
接着将包含加密的文本,组成的拉丁文大写字母 A到Z,每一行被终止点。紧急情况下应解码的。答案应包含解密后的消息 (在单个行,没有线分裂需要)。
input data:
2 3
YHQL YLGL YLFL.
HYHQ BRX EUXWXV.

answer:
VENI VIDI VICI. EVEN YOU BRUTUS.

代码如下:

 1 Arys =[MXKKTLOKRJY GXK MUTK TUC ZNK YKIXKZ UL NKGZNKX GRK GTJ LUXMOBK AY UAX JKHZY.,
 2 ZNK UTIK GTJ LAZAXK QOTM GTJ YU EUA ZUU HXAZAY.,
 3 IGRRKJ OZ ZNK XOYOTM YAT RUBKYZ ZNUA SK VKZKX GXK CUTJKXY SGTE ZURJ.,
 4 GY KGYE GY REOTM CNU CGTZY ZU ROBK LUXKBKX OT GTIOKTZ VKXYOG ZNKXK CGY G QOTM.,
 5 G TOMNZ GZ ZNK UVKXG ZNK JKGJ HAXE ZNKOX UCT JKGJ.,
 6 G JGE GZ ZNK XGIKY MOBK EUAX XUUQY HAZ TUZ JORGXGS.]
 7 
 8 K = 6
 9 alphabet1 = ABCDEFGHIJKLMNOPQRSTUVWXYZ‘  # 原始字母表
10 alphabet2 = alphabet1[K:] + alphabet1[:K]  # 移动后的字母表
11 
12 
13 for TEXT1 in Arys:
14     TEXT2 = TEXT1[:-1]
15     TEXT = TEXT2.split( )  # 把文本分成单个字符串,即一个个单词‘ZNK‘, ‘GTJ‘
16     Arrays = []
17     for word in TEXT:
18         List = []  # 把单个单词分成,一个个字符‘Z‘, ‘N‘, ‘K‘
19         for old in word:
20             if old in alphabet2:
21                 new = alphabet1[alphabet2.index(old)]   # 找到对应字母
22             List.append(new)
23         new_word = ‘‘.join(List)  # 合并成单词
24         Arrays.append(new_word)
25     Ans = {}{}.format( .join(Arrays), .)  # 按要求格式化字符串,末尾有逗号‘.‘
26     print(Ans, end= )
27   
28 # 输出结果: GREENFIELDS ARE GONE NOW THE SECRET OF HEATHER ALE AND FORGIVE US OUR DEBTS. THE ONCE AND FUTURE KING AND SO YOU TOO BRUTUS. CALLED IT THE RISING SUN LOVEST THOU ME PETER ARE WONDERS MANY TOLD. 
AS EASY AS LYING WHO WANTS TO LIVE FOREVER IN ANCIENT PERSIA THERE WAS A KING. A NIGHT AT THE OPERA THE DEAD BURY THEIR OWN DEAD. A DAY AT THE RACES GIVE YOUR ROOKS BUT NOT DILARAM.

   还可以用另外一种方法,通过ord(‘A‘),找到对应字符的ASCII值,通过加减K值,得到新的字符。但要注意大小写,大写字母的ASCII值在65到90,注意分条件。

 

2.Triangle Area(三角形面积)

说明:能够计算三角形的面积是非常重要的,因为许多更复杂的任务通常很容易被简化成这样(我们以后也会用到它)。已知的最古老的方法之一是Heron公式,它把三角形边的长度作为输入。

在这个问题中,你要写一个程序,它使用三角形顶点的X和Y坐标。所以你可以用这个公式或者找到另一个。

Input data 将包含要处理的三角形的数量。
下一行将包含6个值,依次是 X1 Y1 X2 Y2 X3 Y3,描述一个三角形的三个顶点。
答案应该给出由空间分隔的三角形区域(预计精度为1e-7)。

例如:

data:
3
1 3 9 5 6 0
1 0 0 1 10000 10000
7886 5954 9953 2425 6250 2108

answer:
17 9999.5 6861563

海伦公式:海伦公式利它是利用三角形的三条边的边长直接求三角形面积的公式。表达式为:S=√p(p-a)(p-b)(p-c),它的特点是形式漂亮,便于记忆。

  假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:S=√p(p-a)(p-b)(p-c)

  公式里的p为半周长:p=(a+b+c)/2,所有只要通过三个点求出三角形的三个边长,就可以计算三角形的面积了。

代码如下:

 1 import math #导入math模块,需要用到sqrt开平方
 2 
 3 Arrays = [[1407, 1016, 6823, 9818, 5982, 9430],
 4 [7789, 3696, 6561, 5583, 1463, 4274],
 5 [3235, 9476, 4992, 822, 4024, 4507],
 6 [5970, 7162, 352, 8567, 9296, 1582],
 7 [5066, 2462, 8114, 7451, 4732, 2113]]
 8 
 9 
10 for i in range(len(Arrays)):
11     a = math.sqrt((Arrays[i][0] - Arrays[i][2]) ** 2 + (Arrays[i][1] - Arrays[i][3]) ** 2) # 计算三角形的边长
12     b = math.sqrt((Arrays[i][2] - Arrays[i][4]) ** 2 + (Arrays[i][3] - Arrays[i][5]) ** 2)
13     c = math.sqrt((Arrays[i][4] - Arrays[i][0]) ** 2 + (Arrays[i][5] - Arrays[i][1]) ** 2)
14     p = (a + b + c) / 2  # 求半周长
15     S = math.sqrt(p * (p - a) * (p - b) * (p - c)) # 用海伦公式计算三角形面积
16     print(S, end= )
17 #输出结果:2650536.9999999963 5613689.000000002 951263.5000000321 13337704.999999976 301287.0000000146

 

以上是关于我记得有一种加密方法,就是选取一个字母组合作为开始,按照这个字母的顺序,对应于,ABCDEFG等等。的主要内容,如果未能解决你的问题,请参考以下文章

牛客 HJ36 字符串加密

palyfair密码是吗呀

密码由 6-16 位数字、字母或符号组成,至少包含 2 种字符。 保存

华为机试HJ36:字符串加密

什么是凯撒加密法?

一种playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母)