密码学原理精解【4】

Z 256 下的希尔密码 Z_{256}下的希尔密码 Z256下的希尔密码

概述

m ≥ 2 为正整数,表示 m 维向量空间 P 和 C 分别是原文和密文 P = C = ( Z 256 ) m K = { 定义在 Z 256 上的 m × m 的可逆矩阵 } 加解密 : z 256 上的加密: e K ( x ) = x K z 256 上的解密: d K ( y ) = y K − 1 m\ge 2为正整数,表示m维向量空间 \\P和C分别是原文和密文 \\P=C=(Z_{256})^m \\K=\{定义在Z_{256}上的m \times m的可逆矩阵\} \\加解密: \\z_{256}上的 加密:e_K(x)=xK \\z_{256}上的解密:d_K(y)=yK^{-1} m2为正整数,表示m维向量空间PC分别是原文和密文P=C=(Z256)mK={定义在Z256上的m×m的可逆矩阵}加解密:z256上的加密:eK(x)=xKz256上的解密:dK(y)=yK1

example

K密钥选择

  • K的形式
    取m=3,需要选择一个K(密钥)满足 k 在 Z 256 下可逆。即: g c d ( ∣ K ∣ , 26 ) = 1 k在Z_{256}下可逆。即:gcd(∣K∣,26)=1 kZ256下可逆。即:gcd(K,26)=1
    具体原理见密码学原理精解【3】
    K的形式如下面矩阵所示:
    K = [ K 11 K 12 K 13 K 21 K 22 K 23 K 31 K 32 K 33 ] K=\begin{bmatrix} K_{11} & K_{12}&K_{13} \\K_{21} & K_{22}&K_{23} \\K_{31} & K_{32}&K_{33} \end{bmatrix} K= K11K21K31K12K22K32K13K23K33
  • 计算K
    使用Julia完成计算(也可使用C++完成)
    1、定义K
julia> k=rand(0:255,3,3)
3×3 Matrix{Int64}:180  191   64128  120   63139   27  168

2、选择K,计算det(k)。

using LinearAlgebra
k=rand(0:255,3,3)
dk=det(k)
while abs(dk)<1.0 || abs(dk-trunc(Int,dk))>0.0global kglobal dkk=rand(0:255,3,3)dk=det(k)sleep(1)println("try again")
end
dk=dk % 256 	
if dk<0 dk=256+dk
end
println(k)
println(dk)
julia> include("e:/learn/learn1.jl")
try again
try again
[55 174 63; 47 135 200; 231 179 148]
200.0

3.保证K可逆。

using LinearAlgebra
isOk=false
k=rand(0:255,3,3)
dk=det(k)
println("trying")
while gcd(trunc(Int,dk),256)!=1 || abs(dk)<1.0 ||abs(trunc(Int,dk)-dk)>0.000001global kglobal dkk=rand(0:255,3,3)dk=det(k)dk=dk % 256 	if dk<0 dk=256+dkendprint(".")	sleep(1)
end
println("I found out!")
println(k)
println(dk)
julia> include("e:/learn/learn1.jl")
trying
...I found out!
[16 91 215; 171 253 50; 8 186 121]
121.0
julia> include("e:/learn/learn1.jl")
trying
........I found out!
[109 138 25; 62 128 229; 19 253 224]
207.0

在此,我们取K=
K = [ 16 91 215 171 253 50 8 186 121 ] K=\begin{bmatrix} 16 & 91 &215 \\171 & 253 &50 \\8 & 186&121 \end{bmatrix} K= 1617189125318621550121

∣ K ∣ − 1 |K|^{-1} K1

∣ k ∣ = d e t ∣ k ∣ ∣ k ∣ − 1 = 12 1 − 1 = 201 |k|=det|k| \\|k|^{-1}=121^{-1}=201 k=detkk1=1211=201

julia> for i in range(1,256)if (121*i) % 256==1println(i)println(121*i)breakendend
201
24321

K ∗ K^* K

  • 下面是在 Z 26 Z_{26} Z26下的运算。
using LinearAlgebra
k=[10 5 12 ;3 14 21;8 9 11]
adjoint_k=[0 0 0;0 0 0;0 0 0]
for i in range(1,3)index_i=[1,2,3]deleteat!(index_i,i)for j in range(1,3)global kindex_j=[1,2,3]deleteat!(index_j,j)		print([index_i,index_j],"=")println(k[index_i,index_j])a_ij=(-1)^(i+j)*round(Int,det(k[index_i,index_j]))a_ij=a_ij % 26if a_ij <0 a_ij=26+a_ijendadjoint_k[j,i]=a_ijend
end
println(adjoint_k)
julia> include("e:/learn/learn1.jl")
[[2, 3], [2, 3]]=[14 21; 9 11]
[[2, 3], [1, 3]]=[3 21; 8 11]
[[2, 3], [1, 2]]=[3 14; 8 9]
[[1, 3], [2, 3]]=[5 12; 9 11]
[[1, 3], [1, 3]]=[10 12; 8 11]
[[1, 3], [1, 2]]=[10 5; 8 9]
[[1, 2], [2, 3]]=[5 12; 14 21]
[[1, 2], [1, 3]]=[10 12; 3 21]
[[1, 2], [1, 2]]=[10 5; 3 14]
[17 1 15; 5 14 8; 19 2 21]
  • Z 256 Z_{256} Z256下的运算
    我们本次要用到的是模256,所以上面程序改下
using LinearAlgebra
k=[16 91 215; 171 253 50; 8 186 121]
adjoint_k=[0 0 0;0 0 0;0 0 0]
for i in range(1,3)index_i=[1,2,3]deleteat!(index_i,i)for j in range(1,3)global kindex_j=[1,2,3]deleteat!(index_j,j)		print([index_i,index_j],"=")println(k[index_i,index_j])a_ij=(-1)^(i+j)*round(Int,det(k[index_i,index_j]))a_ij=a_ij % 256if a_ij <0 a_ij=256+a_ijendadjoint_k[j,i]=a_ijend
end
println(adjoint_k)
julia> include("e:/learn/learn1.jl")
[[2, 3], [2, 3]]=[253 50; 186 121]
[[2, 3], [1, 3]]=[171 50; 8 121]
[[2, 3], [1, 2]]=[171 253; 8 186]
[[1, 3], [2, 3]]=[91 215; 186 121]
[[1, 3], [1, 3]]=[16 215; 8 121]
[[1, 3], [1, 2]]=[16 91; 8 186]
[[1, 2], [2, 3]]=[91 215; 253 50]
[[1, 2], [1, 3]]=[16 215; 171 50]
[[1, 2], [1, 2]]=[16 91; 171 253]
[65 51 75; 189 216 125; 86 56 7]

K − 1 K^{-1} K1

K − 1 = ∣ K ∣ − 1 K ∗ = 201 ∗ K ∗ = ? K^{-1}=|K|^{-1}K^*=201*K^*=? K1=K1K=201K=?

K*=[65 51 75; 189 216 125; 86 56 7]
using LinearAlgebra
adjoint_k=[65 51 75; 189 216 125; 86 56 7]
k=201*adjoint_k
for i in range(1,3)for j in range(1,3)a_ij=k[i,j] % 256if a_ij <0 a_ij=256+a_ijendadjoint_k[j,i]=a_ijend
end
println(adjoint_k)
julia> include("e:/learn/learn1.jl")
[9 11 227; 101 152 37; 134 248 127]

现在K和K的逆都已经计算完毕,下一步可以完成加密计算了,我们用C++实现(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统中的各种命令的解释和帮助(含内部命令、外部命令)

目录 一、说明 二、命令详解 1、帮助命令的种类 &#xff08;1&#xff09;help用法 &#xff08;2&#xff09;--help用法 2、如何区别linux内部命令和外部命令 三、help和—help 四、man 命令 1、概述 2、语法和命令格式 &#xff08;1&#xff09;man命令的格式&…

Spring Cloud中的服务熔断与降级

Spring Cloud中的服务熔断与降级 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Spring Cloud中的服务熔断与降级策略。 一、什么是服务熔…

qt6 通过http查询天气的实现

步骤如下&#xff1a; cmakelist 当中&#xff0c;增加如下配置 引入包 访问远端api 解析返回的数据 cmakelist 当中&#xff0c;增加如下配置&#xff0c;作用是引入Network库。 引入包 3、访问远端api void Form1::on_pushButton_clicked() {//根据URL(http://t.weather.…

接口测试流程及测试点!

一、什么时候开展接口测试 1.项目处于开发阶段&#xff0c;前后端联调接口是否请求的通&#xff1f;&#xff08;对应数据库增删改查&#xff09;--开发自测 2.有接口需求文档&#xff0c;开发已完成联调&#xff08;可以转测&#xff09;&#xff0c;功能测试展开之前 3.专…

PHP 面向对象编程(OOP)入门指南

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种编程范式&#xff0c;通过使用对象来设计和组织代码。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;支持面向对象编程。本文将介绍PHP面向对象编程的基本概念和用法&#xff0…

2.3.2 主程序和外部IO交互 (文件映射方式)----IO Client实现

2.3.2 主程序和外部IO交互 &#xff08;文件映射方式&#xff09;----IO Client C实现 和IOServer主要差别&#xff1a; 1 使用Open_Client 连接 2 一定要先打开IOServer&#xff0c;再打开IO_Client 效果显示 1 C 代码实现 1.1 shareddataClient.h 头文件中引用 和sharedd…

手写starter写核心

文章目录 使用cn.smart 不能使用com 避免在yml配置的时候 开启或者 写万能接口实现调整日志级别写了core核心 但是没有引入其他功能组件,就是注解可以使用但是功能没有增,所以core的作用就是写入注解从新写starter 第一步提取注解 写到核心包里面,看其他包 新建模块 使用cn.s…

开源发布Whistle: 基于弱音素监督推进数据高效多语言和跨语言语音识别

论文地址&#xff1a;https://arxiv.org/abs/2406.02166 开源代码及模型&#xff1a; https://github.com/thu-spmi/CAT/blob/master/egs/cv-lang10/readme.md 摘 要 Whistle和Whisper一样&#xff0c;均采用弱监督方式训练ASR基座模型。不同于Whisper采用基于子词&#xff0…

全志T113系列芯片参数|性能|功耗|资料|选型-远众技术

全志T113-i和T113-S3/S4处理器&#xff0c;凭借高性价比、丰富接口、工业级性能等特性&#xff0c;适合不同应用场景。 一、T113-i&#xff1a;强大性能与丰富接口的理想嵌入式处理器 全志T113系列中的T113-i是一款引人注目的高性能、低成本嵌入式处理器&#xff0c;专为各种…

嵌入式面试需要注意的问题!

1.在嵌入式和IT行业&#xff0c;技术更新换代非常快。因此&#xff0c;求职者必须时刻关注行业的最新动向和发展趋势。了解当前市场上哪些技术和岗位需求量大&#xff0c;哪些新兴技术值得学习和掌握&#xff0c;都是至关重要的。 &#x1f538;嵌入式行业&#xff1a;嵌入式系…

1、项目基础

1、系统架构图 2、项目业务组成 3、技术选型 3.1 前端 vue3 ts sass axios 3.2后端 spring-cloud系列 gateway openfeign spring-cloud-alibaba系列 nacos sentinel seata

基于矩阵分解算法的评分预测实现---信息检索课设以及所涉及的深度学习原理

一、实验环境 Windows,Python 3 Python作为主要编程语言,使用Python的Pandas、NumPy、Matplotlib等库 二、实验内容 主要任务 查阅相关资料,了解矩阵分解算法的基本概念、应用场景及其难点。重点了解SVD(Singular Value Decomposition,奇异值分解)系列方法。掌握Pyth…

使用Python进行文件批量重命名:轻松实现文件管理

哈喽,大家好,我是木头左! 引言 在日常生活和工作中,经常需要对大量的文件进行重命名。手动一个个地修改文件名不仅耗时耗力,还容易出错。为了解决这个问题,可以利用Python编程语言来实现文件的批量重命名。本文将介绍如何使用Python编写一个简单的脚本,实现对文件进行批…

windows@无密码的本地用户账户相关问题@仅用用户名免密登录远程桌面登录和控制@无密码用户访问共享文件夹以及挂载问题

文章目录 abstract此用户无法登录账户被禁用问题访问共享文件夹时带上凭据错误案例和解决 两类登录方式控制台登录与远程登录的区别为什么限制空密码账户只允许控制台登录相关安全策略如何修改该策略注意事项 启用允许被免密登录功能使用空密码进行远程桌面连接设置远程桌面链接…

硅纪元视角 | 1 分钟搞定 3D 创作,Meta 推出革命性 3D Gen AI 模型

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

2.2.2 C#中显示控件BDPictureBox 的实现----DisplayContext说明续

2.2.2 C#中显示控件BDPictureBox 的实现----DisplayContext说明续 1 主要目标描述 实现图片缩放信息和中心点位置偏移信息的管理&#xff0c;外部调用者只要输入放大&#xff0c;缩小&#xff0c;位置偏移&#xff0c;其他全部由displayContext 实现 2 公共的函数部分&#…

第二天:ALOAM前端讲解【第2部分】

三、scan2scan 3. 帧间匹配 特征关联与损失函数计算 (1)线特征 点到线的距离公式: d ϵ = ∣ ( X ~ ( k +

网安小贴士(2)OSI七层模型

一、前言 OSI七层模型是一种网络协议参考模型&#xff0c;用于描述计算机网络体系结构中的不同层次和功能。它由国际标准化组织 (ISO) 在1984年开发并发布。 二、定义 OSI七层模型&#xff0c;全称为开放式系统互联通信参考模型&#xff08;Open Systems Interconnection Refe…

微信小程序 DOM 问题

DOM 渲染问题 问题 Dom limit exceeded, please check if theres any mistake youve made.测试页面 <template><scroll-view scroll"screen" style"width: 100%;height: 100vh;" :scroll-y"true" :scroll-with-animation"true&…

记录:pcl库使用VoxelGrid对象对点云下采样时引发free(ptr)异常的解决办法 C++

如题&#xff0c;使用pcl库的VoxelGrid对象对点云下采样时&#xff0c;Memory.h文件中EIGEN_DEVICE_FUNC inline void aligned_free(void *ptr)函数的free(ptr);引发异常&#xff08;203行&#xff09;解决办法。 原使用场景代码&#xff1a; pcl::VoxelGrid<pcl::PointXYZ…