轨道
/
Java
Java
/
练习
/
简单密码
简单密码

简单密码

困难

说明

实现一个维吉尼亚密码。 维吉尼亚密码是一种简单的替换密码。

密码术语

密码是一种用于加密(也就是编码)字符串的算法。 未加密的字符串称为_明文_,加密后的字符串称为_密文_。 把明文转换为密文称为_编码_,反过来则称为_解码_。

在_替换密码_中,明文的每个字母都会被替换成一个密文字母,而替换的依据是一个_密钥_。 (注意,替换后的字母有可能和原来的字母相同。)

编码细节

在这种密码中,密钥是一串小写字母,比如"abcd"。 明文的每个字母都会根据密钥中对应的字母_平移_或_旋转_一定的距离。 密钥中的"a"表示平移 0 位(也就是不平移)。 密钥中的"b"表示平移 1 位。 密钥中的"c"表示平移 2 位,依此类推。

明文的第一个字母使用密钥的第一个字母,明文的第二个字母使用密钥的第二个字母,依此类推。 如果在明文用完之前密钥先用完了,就回到密钥的开头重新开始。

如果密钥只包含一个字母,比如"dddddd",那么明文的所有字母都平移相同的位数(在这个例子里是 3 位),这就和旋转密码或移位密码(有时也叫凯撒密码)一样了。 例如,明文"iamapandabear"会变成"ldpdsdqgdehdu"。

如果密钥只包含字母"a"(一个或多个),平移距离就是零,密文与明文相同。

不过,密钥通常比这更复杂! 如果密钥是"abcd",那么明文的字母会分别平移 0、1、2、3 位。 如果明文是"hello",我们需要 5 次平移,所以密钥会循环使用,平移距离依次是 0、1、2、3、0。 把这些平移作用到"hello"的字母上,就得到"hfnoo"。

随机密钥

如果没有提供密钥,就生成一个密钥,由至少 100 个随机的小写拉丁字母组成。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Java Exercism

准备好开始 简单密码 了吗?

注册 Exercism,借助 26 个概念158 个练习 和真人导师指导,学习并掌握 Java,全部免费。