Hill Cipher算法中如何计算逆密钥矩阵?

2024-02-28

我发现很难理解希尔密码算法中矩阵逆的计算方式。我知道这一切都是通过模算术完成的,但不知何故,事情并没有加起来。我真的很感激一个简单的解释!

考虑以下希尔密码密钥矩阵:

 5 8 
17 3

请使用上面的矩阵进行说明。


你必须学习线性同余定理 http://en.wikipedia.org/wiki/Linear_congruence_theorem扩展GCD算法 http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm,属于数论 http://en.wikipedia.org/wiki/Number_theory,为了理解背后的数学模算术 http://en.wikipedia.org/wiki/Modulo_arithmetic.

例如,矩阵 K 的逆矩阵为 (1/det(K)) * adjoint(K),其中 det(K) 0。

我猜你不明白如何计算1/det(K) http://en.wikipedia.org/wiki/Modular_multiplicative_inverse在模算术中,这就是线性同余和 GCD 发挥作用的地方。

您的 K 的 det(K) = -121。假设模 m 是 26。我们想要x*(-121) = 1 (模 26)。
[ a = b (mod m) 表示 a-b = N*m]

我们很容易发现对于x=3上面的同余式是正确的,因为 26 能整除 (3*(-121) -1)。当然,正确的方法是反向使用GCD来计算x,但我没有时间解释如何做。检查扩展 GCD 算法:)

现在,inv(K) = 3*([3 -8], [-17 5]) (mod 26) = ([9 -24], [-51 15]) (mod 26) =([9 2]、[1 15]).


Update:查看计算数论基础知识 http://www.math.umbc.edu/~campbell/NumbThy/Class/BasicNumbThy.html了解如何使用扩展欧几里德算法计算模逆。注意-121 mod 26 = 9, 因此对于gcd(9, 26) = 1 we get (-1, 3).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hill Cipher算法中如何计算逆密钥矩阵? 的相关文章

  • 解密后缺少几个字符

    这是我原来的xml table table
  • 在 O(n) 时间内运行的指数乘法算法?

    我正在读一本算法教科书 我被这个问题难住了 假设我们要计算值 x y 其中 x 和 y 为正数 分别具有 m 和 n 位的整数 解决该问题的一种方法是执行 y 1 乘以 x 你能给出一个仅使用 O n 乘法步骤的更有效的算法吗 这会是一个分
  • 无需动态分配的RSA实现

    典型的 RSA 实现包含一个多精度整数库 典型的多精度整数库使用动态分配将大整数表示为大小合适的机器字数组 我预计当使用多精度整数仅使用 RSA 2048 来加密或解密已知长度的消息 通常是对称加密密钥 时 可能会遇到数学整数的限制 并且它
  • 如何找到最长的回文子序列(不是它的长度)

    我想找出字符串中最长的回文子序列 我到处都找到了找出子序列长度的算法 并声明该算法也可以扩展以返回子序列 但我没有找到如何实现的 有人能解释一下我怎样才能得到序列吗 既然你提到了链接最长回文子序列 http www geeksforgeek
  • 为无向无权图实现推重标签算法 s-t 最小割边

    我正在寻找一个好的解决方案来在无向和未加权图中找到 s t 最小切割边 我想使用推送重新标记算法 但我不确定如何实现它以在无向和未加权图上找到最小割 在每对顶点之间有两条反向边 并在所有边上赋予相同的权重 并应用推送重新标记算法 我可以用这
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 在无向图中查找强连通分量

    我想在无向图中找到强连接的组件 即如果我从节点开始A然后我会回到节点A并且每条边都被恰好访问一次 对于有向图可以使用Tarjan算法来寻找强连通分量 但是对于无向图怎么办 我认为您错过了强连通分量的含义 强连接组件 如果所有顶点对之间都存在
  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • Java:如何实现3和?

    我正在研究 3 Sum 来自己实现它 并遇到了以下规则的实现 给定一个由 n 个整数组成的数组 S S 中是否存在满足 a b c 0 的元素 a b c 查找数组中所有总和为零的唯一三元组 注意 三元组 a b c 中的元素必须按非降序排
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 如何求解:T(n) = T(n - 1) + n

    我已经解决了以下问题 T n T n 1 n O n 2 现在 当我解决这个问题时 我发现界限非常松散 我是否做错了什么 或者只是这样 您还需要一个递归关系的基本情况 T 1 c T n T n 1 n 为了解决这个问题 您可以首先猜测一个
  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 如何高效地在屏幕上精确绘制N个点?

    这听起来是一个简单的问题 但我发现要获得良好的性能是非常棘手的 我提出的第一个算法是随机绘制点 从一组中检查是否已绘制 否则绘制 如果我们只绘制几个点 那么这种方法效果很好 但当我们接近填满屏幕时 速度会灾难性地减慢 我想出的最好的方法是构
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 如何从一组重叠的圆计算多边形集?

    这个问题是一些计算细节的扩展这个问题 https stackoverflow com questions 1667310 combined area of overlapping circles 假设有一组 可能重叠的 圆 并且希望计算这组

随机推荐

  • 删除字符串中的空格

    我必须摆脱超过 1 个空格也就是说 如果有超过 1 个空格 我会将其替换为单个空格 这就是我的做法 但我真的很困惑哪种方法是最好的方法以及所有这些方法有什么区别 下面是我的代码 public class SspaceDemo public
  • 已弃用的 API 和旧版 API 之间的区别?

    我正在研究 Java 中的遗留 APICollection Framework我了解到诸如此类的课程Vector and HashTable已被取代ArrayList and HashMap 然而 它们仍然没有被弃用 并且被视为遗留 本质上
  • WordPress 的 Docker 运行缓慢

    Problem 我在使用 WordPress 和 Docker 时遇到问题 因为我的网站加载时间很慢 7 秒 我不确定为什么会发生这种情况 但我认为这与外部数据库或共享卷有关 Setup 我有一个使用 XDebug 和 Mailhog 在
  • C++ - 如何找到整数的长度

    我试图找到一种方法来查找整数的长度 位数 然后将其放入整数数组中 该作业还要求在不使用 STL 中的类的情况下执行此操作 尽管程序规范确实说我们可以使用 通用 C 库 我会问我的教授是否可以使用 cmath 因为我假设 log10 num
  • salesforce 中的联合身份验证和委派身份验证

    有人知道 salesforce 中的联合身份验证和委托身份验证之间的区别吗 您能解释一下这两种方法中的请求流程吗 主要区别在于联合身份验证上安全断言标记语言 SAML 的使用 委托认证如果您的组织中有移动用户 或者您想要启用委派身份验证 单
  • 如何判断我的应用程序是否从后台恢复?

    我想在应用程序进入后台时锁定它 当它恢复时我想显示我自己的锁定屏幕 锁屏是我的应用程序的一个活动 成功输入密码后 用户可以看到恢复的 Activity 否则他不能 我怎样才能做到这一点 主要问题是 当你开始一个项目时 你必须得到一个特定的行
  • 如何在 Django 中将两个模型字段表示为一个表单字段?

    我似乎无法弄清楚如何在 Django 中正确处理以下情况 我在模型中有一个日期范围 我将其存储为两个单独的字段 date start and date end start date models DateTimeField end date
  • 如何解决 C++ 中友元声明的循环依赖?

    为什么以下代码无法编译以及如何修复它 我得到的错误是 使用未声明的标识符 Foo 虽然Foo在错误发生的地方 在friend声明于Bar foo h ifndef FOO H define FOO H include bar h neede
  • 使用位掩码组合枚举值

    我知道可以在枚举值中使用位掩码 但我不知道如何创建它 我有一个简单的枚举 enum State minimizing 0 maximizing minimized maximized 状态总是State minimized or State
  • 在同一行初始化两个变量

    我很难找到这个概念的权威例子或讨论 如果我的 Ruby 方法中有 2 个数字变量 我需要将它们初始化为零 它们将用作计数器 这可以吗 安全吗 它在我的测试中有效 而不是这个 foo 0 bar 0 你可以这样做 foo bar 0 这似乎是
  • 了解Android联系人的架构

    我正在开发一个 Android 应用程序 它需要知道何时添加 更新 删除联系人 所以我读了几篇文章 据我所知 每当联系人发生更改时 我们都可以通过内容观察者收到通知 但我们无法获取已添加 更新 删除的联系人 因此 我阅读了官方 API 并准
  • 来自 API 的 2 个并发请求数据混淆

    我使用 Nodejs 作为我的应用程序 API 的后端 但我意识到当有 2 个不同的用户不断请求同一个方法时 从 MySQL 请求返 回的数据有时可能会混淆 这是我的代码 router get v1 getList function req
  • 使用 Parcel 为浏览器构建 - 如何不输出 CommonJS 或 ES 模块

    我正在尝试编译一个我编写的库 以便可以将分布式文件放入script标记并在浏览器中运行 我正在尝试用 Parcel 2 来做到这一点 我觉得我已经很接近了 但每次我认为我在那里时都会出现一些新问题 关键是我想要它not捆绑外部依赖项 例如
  • 如果使用遗留库,如何避免 Java 中的未检查转换警告?

    我喜欢java中的泛型功能并且经常使用它 但如果我使用尚不支持泛型的库 我就会遇到问题 Servlet 就是一个例子 如果你使用ServletRequest getParameterMap 结果将是一个原始地图 但它只包括String作为钥
  • 在 R 3.1.1 (Windows) 中安装 rCharts 时出错

    是否有适用于 R 3 1 1 的 rCharts 版本 我尝试了2种方法 均失败 方法一 devtools install github ramnathv rCharts Downloading github repo ramnathv r
  • 是否可以在 Meta 刷新之前运行 JavaScript 代码

    一直以来 我们都在使用这个可靠的网站重定向 HTML JavaScript 代码
  • 如何在 Swift 中实现范围滑块

    我正在尝试实现范围滑块 并且使用了名为的自定义控件NMR范围滑块 https www cocoacontrols com controls nmrangeslider 但是当我使用它时 滑块根本不出现 难道也是因为它都是用 Objectiv
  • TestNG 跳过测试 - 为什么?

    我正在使用 testng 和 selenium 测试一个网络应用程序 测试主要包括打开应用程序的几个页面 并针对每个页面执行一些特定的活动 因此 我有一个执行 打开页面 测试的抽象基类 并定义了一个用作该测试的数据提供程序的抽象方法 然后有
  • 比较字符串时忽略希伯来语元音

    晚上好 我希望你能帮助我解决这个问题 因为我正在努力寻找解决方案 我有一个单词提供者 他给我元音希伯来语单词 例如 Vowelled 不元音 元音 不元音 与我的提供者不同 我的用户通常无法输入希伯来语元音 我也不应该希望他这样做 用户故事
  • Hill Cipher算法中如何计算逆密钥矩阵?

    我发现很难理解希尔密码算法中矩阵逆的计算方式 我知道这一切都是通过模算术完成的 但不知何故 事情并没有加起来 我真的很感激一个简单的解释 考虑以下希尔密码密钥矩阵 5 8 17 3 请使用上面的矩阵进行说明 你必须学习线性同余定理 http