Engee 文档
Notebook

置换密码模型

我们实现了一个置换密码模型,它改变了输入消息字符中的位顺序。

任务说明

我们正在实现的排列密码将对输入消息中的每个字节执行按位排列。 如果符号来到输入3100011111),然后在应用置换表之后 [2, 1, 5, 8, 4, 6, 7, 3] 我们将得到一个加密字符。 62 (00111110).

下面给出了描述此任务的模型。:

image.png

隐藏在排列块后面的是执行
*将输入符号分解为位数组(块 Integer to Bit Converter),
*使用块(块)排列Permute Matrix),
*从一个比特向量(块)形成一个UInt8数字 Bit to Integer Converter).

image.png

块前面的数字表示用于初始化随机数生成器的设定值。 更改此值时(字段 Seed block masks)元素内部的排列顺序自动复盖为函数设置的顺序 shuffle 排列的顺序。

启动模型并分析结果

In [ ]:
# Загрузим модель, если она еще не открыта на холсте
if "permutation_cipher_model"  getfield.(engee.get_all_models(), :name)
    engee.load( "$(@__DIR__)/permutation_cipher_model.engee");
end

model_data = engee.run( "permutation_cipher_model" );

让我们看看在仿真过程中通过每条通信线路传递了哪些值。:

In [ ]:
source_message = collect(model_data["Сообщение"]).value
cipher_text = Int.(collect(model_data["Шифротекст"]).value)
received_message = Int.(collect(model_data["Расшифровка"]).value)

println( "Отправленное сообщение: ", source_message )
println( "Зашифрованное сообщение: ", cipher_text )
println( "Полученное сообщение: ", received_message )
Отправленное сообщение: [31, 12, 19, 17, 16, 15, 6, 15, 20, 1, 31, 12, 19, 17, 16, 15, 6, 15, 20, 1, 31]
Зашифрованное сообщение: [62, 36, 26, 24, 8, 54, 6, 54, 12, 16, 62, 36, 26, 24, 8, 54, 6, 54, 12, 16, 62]
Полученное сообщение: [31, 12, 19, 17, 16, 15, 6, 15, 20, 1, 31, 12, 19, 17, 16, 15, 6, 15, 20, 1, 31]

解码消息:

In [ ]:
alphabet_dict = Dict( zip( 1:33, "абвгдеёжзиёклмнопрстуфхцчшщъыьэюя" ))
print( "Расшифрованное сообщение: ", join( [alphabet_dict[d] for d in received_message], "" ) )
Расшифрованное сообщение: экспонентаэкспонентаэ

结论

我们创建了另一个用于构建加密系统的基本块–最简单的块,用于消息字符内的直接和"反向"位排列。