【密码学】ElGamal加密算法原理 以及 例题讲解

news/2024/10/30 6:31:26/

目录

  • 前言
  • 1. 原理
  • 2. 例题
    • 2.1 例题一
    • 2.2 例题二

前言

具体的性质:

  • 非对称加密算法
  • 应用于一些技术标准中,如数字签名标准(DSS)、S/MIME 电子邮件标准
  • 算法定义在任何循环群 G 上,安全性取决于 G 上的离散对数难题

1. 原理

主要由三部分组成:密钥生成、加密和解密

可以用这幅图讲解:(用公钥加密,私钥解密):
在这里插入图片描述

该算法与Difffie-Hellman一样,ElGamal的系统用户共同选择一个素数 q,a 是 q 的素根。

一、密钥生成:(用户A)

  1. 随机生成 整数X (1< X < q - 1)
  2. 计算 公钥Y = a X mod q

可以得到私钥 X,公钥 {q,a,Y}

二、加密:(用户B通过A的公开密钥进行加密)

  1. 发送信息为 整数 M(1 ≤\leq X ≤\leq q - 1),以分组密码序列的方式来发送信息,其中每个分块的长度不小于整数 q
  2. 取任意整数 小写k(1 ≤\leq k ≤\leq q - 1)
  3. 取一次密钥 大写K :K = ( Y ) k mod q
  4. 整数M 加密成 明文对(C1,C2),C1 = ak mod q ,C2 = KM mod q

三、解密:(用户A恢复密文)

  1. 计算密钥 大写K :K = (C1)X mod q
  2. 计算 整数M,M = (C2K-1) mod q

至于解密的式子 是这样生成:

式子一:
K = ( Y ) k mod q
K = ( a X mod q ) k mod q
K = a kX mod q
K = (C1)X mod q


式子二:
因为 C2 = KM mod q
所以 (C2K-1) mod q = KMK-1 mod q = M mod q = M

2. 例题

2.1 例题一

题目: 已知素数q为19,素根有 {2,3,10,13,14,15} ,此处 选择a = 10。

答案:

一、秘钥生成:(用户A)

  1. 选择X = 5
  2. 计算 Y = a X mod q = 10 5 mod 19 = 3

A用户的 私钥 为5, 公钥为 {q,a,Y} = {19,10,3}

二、加密:(用户B通过A的公开密钥进行加密)

  1. 发送消息17,想选择 小写k = 6
  2. 计算 大写K :K = ( Y ) k mod q = 36 mod 19 = 729 mod 19 = 7
  3. 密文 C1 = ak mod q = 106 mod 1 = 11 ,C2 = KM mod q = 7 x 17 mod 19 = 119 mod 19 =5
  4. 发送密文 M = (11,5)

三、解密:(用户A恢复密文)

  1. 计算 大写K ,K = (C1)X mod q = 115 mod 19 = 7
  2. K-1 为 7-1 mod 19 = 11
  3. 最终 M = (C2K-1) mod q = 5 x 11 mod 19 = 55 mod 19 = 17

2.2 例题二

题目: 素数 37,取素数根,最小为2

答案:

过程与上面类似,此处讲解下具体步骤

一、秘钥生成:(用户A)
随机取一个数,取X 为 5,Y = 2 5 mod 37 = 32

二、加密:(用户B通过A的公开密钥进行加密)
发送29消息,取 小写k 为 7
计算出的 大写K 为 19
C1 = 17,C2 = 33
M = (17,33)

三、解密:(用户A恢复密文)
大写K为 19
M 为 29


http://www.ppmy.cn/news/42083.html

相关文章

朴素贝叶斯

朴素贝叶斯&#xff08;Naive Bayes&#xff09;是一种基于贝叶斯定理&#xff08;Bayes’ theorem&#xff09;的分类算法。它的基本思想是&#xff0c;通过先验概率和条件概率来计算后验概率&#xff0c;从而实现分类。 在朴素贝叶斯分类中&#xff0c;假设每个样本都由多个…

MySQL启动失败:os_file_get_status() failed on ‘./ibdata1‘

在此这前&#xff0c;我对SELinux完全不了解。 MySQL服务启动失败 查看服务状态 [rootlocalhost system]# systemctl status mysqld ● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: fa…

vue - 【最新】简单快捷的 element ui 组件库的主题色更改,批量统一覆盖替换解决方法,无需npm装包。(适用于新手小白的方法,很简单)

效果图 最新解决方案,简单便捷且不用npm安装任何第三方包就能搞定。 原来的主题色是蓝色 ,可以通过本篇博客提供的方法,统一变成其他主题颜色,比如下面的紫色: 下面就是真实的运行效果,保证可行~ 这样就不用每个组件单独去写样式覆盖颜色了! 定制主

提升你的聊天机器人技能:ChatGPT API的高级策略

ChatGPT API 进阶调用指南 ChatGPT API 是基于 OpenAI 的 GPT模型的一个强大工具&#xff0c;可以用于构建各种对话式应用。以下是一些使用 Markdown 语法的进阶调用指南&#xff0c;以帮助您更好地利用 ChatGPT API。 设置用户角色 您可以通过在对话中为用户设置角色&#…

【Linux】网络基础(网络层与链路层)

网络层与链路层典型协议网络层IP 地址地址管理网络号的划分&#xff08;五种&#xff09;特殊的网络以及IP地址路由选择链路层MAC 地址ARP 协议MTU 最大传输单元其他典型协议&#xff1a;ICMP、DNS 、NAT技术ICMP协议DNS 协议NAT & NAPT 技术代理网络层 功能&#xff1a;负…

如何利用空号检测 API 降低企业的业务成本

引言 电话营销和短信营销是现代营销活动的重要手段&#xff0c;但是无效号码的存在导致了很多资源浪费。利用空号检测 API 就可以避免企业向无效号码发送营销信息&#xff0c;降低营销成本。 本文将介绍空号检测 API 的工作原理以及如何利用空号检测 API 降低业务成本的多种方…

自动驾驶TPM技术杂谈 ———— CCRT验收标准(评分标准)

文章目录介绍评价方法指标体系算分方法一级指标二级指标三级指标四级指标五级指标行车辅助能力得分说明跟车能力得分说明前车静止识别与响应得分说明前车低速识别与响应得分说明前车减速识别与响应得分说明前车切入识别与响应得分说明前车切出识别与响应得分说明跟随前车起停得…

Can‘‘t connect to MySQL server on localhost (10061)解决方法

首先检查MySQL 服务没有启动》如果没有启动&#xff0c;则要启动这个服务。 有时候安装mysql后使用mysql命令时报错 Cant connect to MySQL server on localhost (10061)&#xff0c;或者用net start mysql 时报服务名无效&#xff0c;一般是因为mysql服务没有启动。 打开 powe…