security - 替代密码的解密算法
问题描述
让 Z_10 = {0,1,2,3,4,5,6,7,8,9}
我这里有一个对称加密方案,其中
消息 M = M[1]M[2]M[3]M [4]在Z_10中,是一个四位数的字符串,
一个key π <- Perm(Z_10)是Z_10上的一个随机排列,
密文C = C[1]C[2]C[3]C[4 ] = E_π(M) 在 Z_10 中,计算如下:
Alg E_π(M)
For i=1,...,4 do
P[i] <- (M[i] + i) mod 10
C[i] <- π(P[i])
Return C
这是正确的解密算法吗?
Alg D_π(M)
For i=1,...,4 do
P[i] <- (C[i] - i) mod 10
M[i] <- π^(-1)(P[i])
Return M
我相信这是一个替代密码,但我不确定。它是替代密码吗?我们怎么知道?
解决方案
加密算法似乎有一个错误:要么你需要mod 11
,要么更可能的是Z_10 = {0,...9}
. 否则,操作
P[i] <- (M[i] + i) mod 10
将0
和转换10
为1
,使其不可逆转。
除了,是的,它是定义上的替换密码,因为输入字母表的每个字符总是被相同的相应输出字符替换。您甚至可以用表格替换加密逻辑。
您还需要反转解密部分中的操作顺序:首先反转排列,然后进行模加法。
推荐阅读
- websocket - 如何将 API 调用汇集到特定的服务结构节点
- scala - IntelliIdea - 在添加框架支持时看不到 scala
- mysql - Laravel 多级分组
- tensorflow - tensorflow facemesh跟踪地标点的延迟
- paypal - 在实时环境中创建 PayPal 计费计划
- python - 如何使用自制程序打包 Django 应用程序?
- apache-kafka - 如何通过 YAML 中的 Spring Cloud Stream 提供 Kafka Streams 属性?
- perl-pod - perldoc: 'ŷ' 输出为 'X' 和 "=encoding utf8"
- asp.net-mvc - 如何在 DotNetCore 的 Blob 存储中上传多个文件
- python - Colliderect中如何判断物体为什么会相互穿过