我有一个任务,我必须编码仿射密码,问题是,使用函数crypto_modular_inverse是必需的。
以下是声明:
D (y ) =密码模逆(A)*(y- b) mod m
我搜索了文档,但是信息很少,也没有给出任何例子。
我需要了解这个功能是如何被欢迎的。
发布于 2022-05-18 02:59:00
使用仿射密码的本演练:https://crypto.interactive-maths.com/affine-cipher.html
D (y ) =密码模逆(A)*(y- b) mod m
对于加密密钥值a=5和b=8以及26个可加密字符的字母表,密码模逆是
?- crypto_modular_inverse(5, 26, C). % a=5 and alphabet length m=26
C = 21我这样做了,在这里,maplist行进行(A*X+B) mod M和cmi(a)*(y-b) mod m变换,并在其中减去97,这是小写a的ASCII字符代码,使字母从97,98,99下降……到0,1,2.对于密码数学,然后添加97个,使它们返回到可打印的ASCII字符:
:- use_module(library(clpfd)).
affine_a_b_plain_to_cipher(A, B, Plain, Cipher) :-
string_codes(Plain, PlainCodes),
maplist({A,B}/[N,M]>>(M #= ((A*(N-97)+B) mod 26)+97), PlainCodes, CipherCodes),
string_codes(Cipher, CipherCodes).
affine_a_b_cipher_to_plain(A, B, Cipher, Plain) :-
string_codes(Cipher, CipherCodes),
crypto_modular_inverse(A, 26, C),
maplist({C,B}/[N,M]>>(M #= (C*((N-97)-B) mod 26)+97), CipherCodes, PlainCodes),
string_codes(Plain, PlainCodes).?- affine_a_b_plain_to_cipher(5, 8, "affine cipher", Cipher).
Cipher = "ihhwvcvswfrcp"
?- affine_a_b_cipher_to_plain(5, 8, "ihhwvcvswfrcp", Plain).
Plain = "affinencipher"固定字母表以包括空格、大写字母、符号等,是留给读者的练习。
https://stackoverflow.com/questions/72281913
复制相似问题