数字签名算法RSA

2023-05-16

RSA

RSA数字签名算法源于RSA公钥密码算法的思想,将RSA公钥密码算法按照数字签名的方式运用。RSA数字签名算法是迄今为止应用最为广泛的数字签名算法。 RSA数字签名算法的实现如RSA加密算法一致。RSA数字签名算法主要可分为MD系列和SHA系列。

MD系列主要包括:MD2withRSA和MD5withRSA。
SHA系列主要包括:SHA1withRSA,SHA224withRSA,SHA256withRSA,SHA384withRSA,SHA512withRSA。
Java 6提供了MD2withRSA,MD5withRSA,SHA1withRSA支持,其他四中SHA算法第三方加密组建包Bouncy Castle提供支持。

签名过程:

过程:

1)消息发送者产生一个密钥对(私钥+公钥),然后将公钥发送给消息接收者

2)消息发送者使用消息摘要算法对原文进行加密(加密后的密文称作摘要)

3)消息发送者将上述的摘要使用私钥加密得到密文–这个过程就被称作签名处理,得到的密文就被称作签名(注意,这个签名是名词)

4)消息发送者将原文与密文发给消息接收者

5)消息接收者使用公钥对密文(即签名)进行解密,得到摘要值content1

6)消息接收者使用与消息发送者相同的消息摘要算法对原文进行加密,得到摘要值content2

7)比较content1是不是与content2相等,若相等,则说明消息没有被篡改(消息完整性),也说明消息却是来源于上述的消息发送方(因为其他人是无法伪造签名的,这就完成了“抗否认性”和“认证消息来源”)

RSA算法原理

找出两个"很大"的质数:P & Q
N = P * Q
M = (P - 1) * (Q - 1)
找出整数E,E与M互质,即除了1之外,没有其他公约数
找出整数D,使得E*D除以M余1,即 (E * D) % M = 1
经过上述准备工作之后,可以得到:

E是公钥,负责加密
D是私钥,负责解密
N负责公钥和私钥之间的联系
加密算法,假定对X进行加密
(X ^ E) % N = Y
根据费尔马小定义,根据以下公式可以完成解密操作
(Y ^ D) % N = X
RSA本身算法的核心思想还是比较简单的,加密、解密算法的区别也只是在乘方取模部分使用的数字有所区别而已

当然,实际运用要比示例代码复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全, 因此,P、Q、E的选取,公钥、私钥的生成,加密、解密模指数运算都有一定的计算程序,需要依托计算机高速运算来完成。

公开密钥的好处

简单 就是一些乘除而已
可靠 可以保证产生的密文是统计独立,并且分布均匀的,也就是说:
不论给出多少份明文和对应的密文,也无法根据已知的明文和密文的对应关系,破译出下一份密文
N和E可以公开给任何人加密使用,但是只有掌握密钥D的人才可以解密,即使加密者自己也无法解密
灵活 可以产生很多的公钥E和私钥D的组合给不同的加密者

测试数据说明
P = 11;
Q = 13;
N = 143;
M = 120;

E = 89;
D = 209;
提示:本示例程序仅用于演示,N的数值只有143,能够加密的字符范围有限。

应该是私钥加密,公钥解密的。

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

数字签名算法RSA 的相关文章

  • 在c#中使用公钥加密数据,在php中使用私钥解密数据

    我正在尝试在 C 中加密 JSON 字符串 并使用 OpenSSL RSA 在 PHP 中解密 以下代码是 C 语言 public static string EncryptData string data string key BEGIN
  • PKCS1-padding/RSA加密ios objc和java的区别

    我正在开发适用于 ios 和 Android 的应用程序 我对加密任务还比较陌生 在过去的 3 天里 我一直在用头撞墙 因为我无法运行 RSA 加密 两个客户端都从 java 服务器接收公钥 在android中我没有任何问题 显然 因为它与
  • Java 生成 RSA 密钥对并转换为 PEM - 但 OpenSSL 函数 PEM_read_bio_RSA_PUBKEY 返回 null

    我使用以下代码生成 RSA 密钥对并将其转换为 PEM 但是当我使用OpenSSL功能时PEM read bio RSA PUBKEY是返回null Java代码 public static RSAKeyPair creatKeyPair
  • 如何在 iPhone/Objective C 上找出 RSA 公钥的模数和指数

    有没有可能的方法来找出使用 SecKeyGeneratePair 一般的安全框架 创建的公钥的模数和指数 我对此很困惑 但这是我找到的解决方案 不使用任何外部包 首先 转到 Apple 的 CryptoExercise 示例 从那里下载 S
  • 从 Cpanel git 克隆项目,显示此错误“ssh 远程主机标识已更改”

    我知道类似的问题已经被问过很多次了 但这里有一个区别 尝试从 cpanel 共享托管服务器克隆项目 如果尝试使用此命令sudo git clone ssh email protected cdn cgi l email protection
  • Android KeyStore私有指数无法提取

    我想在 Android 密钥库中生成 RSA 密钥对 从 Android 4 3 开始 应该可以在 Android 系统密钥库中生成 RSA 密钥 我通过 工作正常 生成我的 RSA 密钥 Calendar notBefore Calend
  • 为什么 KeyPairGenerator.genKeyPair() 这么慢

    我有一些 Java 代码 当我运行函数时KeyPairGenerator genKayPair 工作时间为 40 秒或更长时间 如何改变这种现状呢 如果我跑 openssl req x509 nodes days 365 newkey rs
  • 从 jquery 安全地调用我的 Web api

    我有一个简单的问题 可能会指出一个复杂的答案 我有一个运行良好的网络 API 但现在我想设置身份验证 授权 我需要它在所有平台上工作 但主要来自 jQuery 当然 我不想像这样以纯文本形式沿着管道发送我的用户名和密码 function G
  • RSA可以同时用作加密和签名吗?

    抱歉 我的脑子突然空白了 编辑 场景 如果我想要信息绕过简单的过滤器 例如f ck 用公钥加密信息 用私钥签名可以吗 公钥可能已经被双方交换过了 而且公钥也很难得到 EDIT 2 这些信息本身可能并没有那么大的凭据 加密和签名的目的是为了绕
  • 使用 X509certificate2 进行 RSA 加密和解密

    所以 我接下来需要的是 创建用于开发的证书 为客户端获取一份证书 为服务器获取一份证书 通过API检索客户端编码的密码并在服务器上解码 现在 我成功创建了以下证书这个链接 https blog jayway com 2014 09 03 c
  • 在OpenSSL中使用RSA公钥生成相应的私钥?

    我知道可以使用这个链接 https www ibm com support knowledgecenter en SSWHYP 4 0 0 com ibm apimgmt cmc doc task apionprem gernerate s
  • 在 C 语言中用于 RSA 解密的 OpenSSL EVP api 的 EVP_OpenInit() 中出现错误

    我在使用 OpenSSL 库 EVP api 进行 RSA 解密时遇到问题 这是我的密钥生成代码 include
  • 获取 rfc7517 格式的 JWKS for Firebase

    我正在使用 Firebase 对我的应用程序中的用户进行身份验证 Firebase 生成一个 JWT 令牌 我需要在我的服务器上对其进行身份验证 我使用 tyk io 来做到这一点 Tyk 支持这些令牌 但要求公钥的数据源位于https w
  • 解码 Base64urlUInt 编码值

    我通常想做的是验证id token从 OpenID Connect 提供商 例如 Google 获得的值 令牌使用 RSA 算法进行签名 公钥从发现 https openid net specs openid connect discove
  • C# 中的数字签名无法在 C++ 中进行验证

    我有一个 C 应用程序 它使用 RSA 对数据进行数字签名 代码如下 RSACryptoServiceProvider rsa new RSACryptoServiceProvider rsa ImportCspBlob privateKe
  • 如何在 Python 中使用 PKCS12 对 RSA 密钥进行编码?

    我正在使用 Python 在 Google App Engine 下 并且我有一些需要以 PKCS 12 格式导出的 RSA 私钥 有什么可以帮助我的吗 我正在使用 PyCrypto KeyCzar 并且我已经弄清楚如何以 PKCS8 格式
  • 将 RSA PKCS1 私钥字符串转换为 Java PrivateKey 对象

    我有一个存储为字符串的 RSA 私钥 我需要将其转换为 PrivateKey 对象以便与 API 一起使用 我可以找到人们从私钥文件转换为字符串的示例 但不能找到相反的方式 我设法将它转换为 PrivateKey 对象 但它是 PKCS8
  • PHP使用RSA私钥解密数据

    我有一个程序 使用 C rsa 公钥加密密码 输出字节数组 为了让我轻松传输它并维护数据 我将字节直接转换为十六进制字符串 现在这就是我遇到问题的地方 我将发布数据发送到我的脚本 现在不确定将其转换为什么以及如何解密它 我正在尝试使用htt
  • 将 webcrypto 密钥导出为 PEM 格式

    我正在将 WebCrypto 与 RSASSA PKCS1 v1 5 结合使用 https github com diafygi webcrypto examples rsassa pkcs1 v1 5 sign https github
  • RSA 私有指数确定

    我的问题是关于 RSA 签名 如果是 RSA 签名 加密 gt y x d mod n 解密 gt x y e mod n x gt 原始消息 y gt 加密消息 n gt 模数 1024 位 e gt 公共指数 d gt 私有指数 我知道

随机推荐

  • proto的介绍和基础使用

    内容摘抄自书籍 Netty redis zookeeper高并发实战 Protobuf使用 proto文件来预先定义的消息格式 数据包是按照proto文件所定义的消息格式完成二进制码流的编码和解码 proto文件 xff0c 简单地说 xf
  • springboot使用oshi获取系统cpu、内存、jvm信息

    OSHI 是基于 JNA 的 xff08 本地 xff09 操作系统和硬件信息库 它不需要安装任何其他额外的本地库 xff0c 旨在提供一种跨平台的实现来检索系统信息 xff0c 例如操作系统版本 进程 内存和 CPU 使用率 磁盘和分区
  • 常用的linux命令

    目录相关命令 xff1a ls 列出当前目录下的文件列表信息 目录 文件夹 当前 xff1a 登陆成功之后 xff0c 打开终端所处的一个目录 a 显示隐藏文件 linux下以 开头的文件是隐藏文件 xff0c 默认不显示 l 显示目录下文
  • 字节后端一二面,讯飞一面

    1 自我介绍 2 rdb aof 3 线程池 4 ping命令用了什么协议 5 应用层的协议 6 为什么四次挥手要timewait 7 算法题 xff1a 和为k的子数组个数 xff08 前缀和 xff09 8 幻读 7 隔离级别 8 tc
  • mysql以某个字段分组进行条件查询,如果为0则补0

    需求 xff1a 有一个version plan表 xff0c 其中有一个字段is urgent 且每个version plan与一个模块moduleId关联 xff0c 现在要查出is urgent为1的模块数和这个模块的总数 xff0c
  • 数据库系统第六章-关系数据理论复习

    候选码若关系中的一个属性或属性组的值能够唯一地标识一个元组 xff0c 且他的子集不能唯一的标识一个元组 xff0c 则称这个属性或属性组做候选码 函数依赖 范式 虽然STC xff08 S T C xff09 3NF xff0c 但它仍存
  • Spring Security登录验证过程详解

    前端 xff1a 在前端页面输入username和password 通过地址login访问验证 后台 xff1a 调用 AbstractAuthenticationProcessingFilter doFilter 方法 原因 xff1a
  • 关于STL的一些理解

    1 集合set 定义 xff1a set lt int gt s1 类型可选 se begin 返回指向第一个元素的迭代器 se clear 清除所有元素 常用 se count 返回某个值元素的个数 常用 xff0c 一般用来查这个元素在
  • ModuleNotFoundError: No module named ‘...’:报错解决方案

    1 module包没安装 这个 就是包的名字 xff0c 看问题定位 xff0c import源文件 xff0c 然后去site packages里找那个模块 xff0c 如果是空的没安装 xff0c 这时候可以在对应的环境里使用pip i
  • C语言----结构体,枚举,共用体

    1 xff09 结构体 span class token comment 例 xff1a 一个描述学生的结构体 span span class token keyword struct span span class token class
  • Nvidia jetson agx xavier can通讯失败,修改时钟源pllaon

    一 问题详情 在调试Xavier can的过程中 xff0c can通信始终有问题 xff0c 收发都会报错 后来发现时钟源导致波特率不匹配 xff0c 所以不能通信 二 修改时钟源 在虚拟机使用官方sdkmanager xff0c 下载安
  • linux下实现https访问

    http转https 适用于linux服务器 linux下nginx 43 ssl实现https访问 xff08 一 xff09 环境准备 xff08 二 xff09 下载nginx源码 xff0c 编译nginx并添加ssl模块 xff0
  • Nvidia Jetson nano 安装Archiconda、gpu版torch、踩坑记录

    Nvidia Jetson nano 安装Archiconda gpu版torch 踩坑记录 jetson nano 属于aarch64架构 xff0c 不同于一般的x86 64的linux系统架构 xff0c 而torch官网上面 htt
  • linux下的yum,vim,gcc,gdb

    我们在windows系统下我们能够很简单进行粘贴复制下载安装 xff0c 也能通过vs进行我们缩写代码的编译运行 xff0c 但是我们在linux下我们应该怎样去操作我们的这些命令呢 xff0c 这章我们就讲解一下我们linux下常用的一些
  • 【Keil】Keil5添加源程序和头文件

    xxx c就是源程序 xxx h就是头文件 源程序添加方法 双击文件夹 xff0c 例如图片上的Source xff0c 跳出弹窗 xff0c 选择需要添加的源程序即可 添加头文件的方法 1 首先点击图片红框处 xff0c 或是在文件夹te
  • C 标准库 string常用函数 笔记

    文章目录 64 TOC 文章目录 前言字符串长度strlen sizeof 字符串拼接strcat strncat 字符串拷贝strcpy strncpy memcpy 内存填充memset 字符串比较strcmp strncmp 字符串查
  • node.js中的http.request方法使用说明_node.js

    方法说明 xff1a 函数的功能室作为客户端向HTTP服务器发起请求 语法 xff1a 复制代码 代码如下 http get options callback 由于该方法属于http模块 xff0c 使用前需要引入http模块 xff08
  • ARM中SP、LR、PC三个寄存器介绍

    寄存器定义和用途 定义 寄存器是中央处理器内的组成部份 寄存器是有限存贮容量的高速存贮部件 xff0c 它们可用来暂存指令 数据和位址 用途 可将寄存器内的数据执行算术及逻辑运算 xff1b 存于寄存器内的地址可用来指向内存的某个位置 xf
  • Linux buffer/cache介绍

    free 命令 与 buffer cache 在 Linux 系统中 xff0c 我们经常用 free m命令来查看系统内存的使用状态 xff1a m 显示单位为MB free m 各个参数的说明 total 内存总数 used 已经使用的
  • 数字签名算法RSA

    RSA RSA数字签名算法源于RSA公钥密码算法的思想 xff0c 将RSA公钥密码算法按照数字签名的方式运用 RSA数字签名算法是迄今为止应用最为广泛的数字签名算法 RSA数字签名算法的实现如RSA加密算法一致 RSA数字签名算法主要可分