0

解码结果

仿射密码
A
B

编码结果

仿射密码
A
B

关于仿射密码 (Affine Cipher)

仿射密码是一种通过替换文本中的字符来进行加密的单表代换密码。

字符的替换通过以下公式进行。

E(x) = (ax + b) mod m

m 表示要转换的字符类型的数量。x 是将字符转换为 0 到 m - 1 之间的数字。ab 是加密密钥。

例如,对于“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这 26 个英文字母,m = 26,x 对应 A ~ Z 转换为数字 0 ~ 25。

文字ABCDEFGHIJKLMNOPQRSTUVWXYZ
x012345678910111213141516171819202122232425

a = 5, b = 3 时,加密流程如下。

加密前SECRET
x184217419
(5x + 3)932313882398
(5x + 3) mod 26152313102320
加密后PXNKXU

使用 a = 5, b = 3 加密所有英文字母的结果如下。

加密前 : ABCDEFGHIJKLMNOPQRSTUVWXYZ
加密后 : DINSXCHMRWBGLQVAFKPUZEJOTY

指定 a = 1, b = -3 等同于凯撒密码,指定 a = 1, b = 13 等同于 ROT13,指定 a = -1, b = -1 等同于阿特巴希密码。

a 必须指定为与 m 互质的数值。这意味着 am 除了 1 以外没有其他公约数。例如,当 m = 26 时,a = 4 是无效的,因为它除了 1 以外还能被 2 整除。在 DenCode 中,如果指定了无效的 a,将不进行转换直接返回原始字符。

其他语言支持

除了拉丁字母,还支持西里尔字母和日语的平假名/片假名。

使用 a = 5, b = 3 加密的结果分别如下。

西里尔字母
加密前 : АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
加密后 : ГИНТЧЬБЖЛРХЪЯДЙОУШЭВЗМСЦЫАЕКПФЩЮ

m = 32 (32个字符)。

日语平假名/片假名
加密前 : ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔ
加密后 : いぉぎこじそぢでぬぱぶほむゅりわゔぅおくごすぞっとねひぷぼめゆるゐぁうかぐさずたつどのびへぽもょれゑあぇがけざせだづなはぴべまゃよろをぃえきげしぜちてにばふぺみやらゎん
加密前 : ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴ
加密后 : イォギコジソヂデヌパブホムュリワヴゥオクゴスゾットネヒプボメユルヰァウカグサズタツドノビヘポモョレヱアェガケザセダヅナハピベマャヨロヲィエキゲシゼチテニバフペミヤラヮン

字符顺序遵循 Unicode 定义。“ゕ”“ゖ”“ヵ”“ヶ”以及“ヷ”“ヸ”“ヹ”“ヺ”不属于加密对象,请注意。

m = 84 (84个字符)。