首页 > 其他分享 >公钥密码体制

公钥密码体制

时间:2023-03-04 13:22:29浏览次数:39  
标签:phi 公钥 加密 RSA 体制 密码 密钥 key

公钥密码体制

公钥密码体制是为了解决对称密码体制中最难解决的2个问题而提出的:

  • 密钥分配问题:在对称密码中,接受方和发送方使用相同密钥。一般情况下该密钥通过加密信道进行传输。但是加密信道可能会被攻击者攻击。
  • 数字签名问题:如果使用对称加密来进行数字签名,那么在对密钥进行管理和分发时带来被攻击者攻击的问题。

在公钥密码体制中存在2个密钥:公钥,私钥。公钥和加密算法是公开的,公钥用于加密数据;私钥是保密的,用于解密。

下面是加密过程

image-20230304122928878

  • 步骤1:接受者B产生一对公钥\(PK_{B}\),私钥\(SK_{B}\)。接收者B将公钥\(PK_B\)发送给发送者A。
  • 步骤2:发送者A发送消息m,则将消息m利用公钥\(PK_B\)进行加密:\(c=E_{PK_B}[m]\),其中E是加密算法。
  • 步骤3:接收者B收到消息后,使用私钥\(SK_B\)对密文c进行解密:\(m = D_{SK_B}[c]\),其中D为解密算法。

RSA算法

算法描述

密钥产生

  • 选择2个保密的大素数p,q
  • 计算\(n=p*q, \phi(n)=(p-1)(q-1)\),\(\phi(n)\)为n的欧拉函数值。
  • 选择一个数e, 满足e与\(\phi(n)\)互素,既\(gcd(e, \phi(n))=1\)
  • 计算e在模\(\phi(n)\)下的逆元d,既:\(d*e \equiv 1\ mod\ \phi(n)\)

则公钥为(e, n),密钥为(d, n)

加密

加密时首先将明文比特串分组,使得每个分组对应的十进制小于n,既分组长度小于\(log_2(n)\),然后对每个明文分组m,作加密操作:

\[c \equiv m^e mod\ n \]

解密

对密文分组的解密运算如下:

\[m \equiv c^d mod\ n \]

RSA算法的安全性

RSA算法的安全性是依赖于分解大数的困难性所决定的,换句话说一个大整数n,如何被分解为两个数字p, q。如果在产生密钥的过程中,p,q选取\(10^{100}\)左右的大素数, 那么n的阶为\(10^{200}\)。想要分解这样的数字还是有困难的。估计在很长的一段时间,密钥长度介于1024bit到2048bit之间的RSA是安全的。

实验

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Util.Padding import pad, unpad

# 生成RSA密钥对
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()

# 显示密钥对
print("私钥:", private_key.decode())
print("公钥:", public_key.decode())

# 初始化加密器和解密器
cipher = PKCS1_OAEP.new(RSA.import_key(public_key))
decryptor = PKCS1_OAEP.new(RSA.import_key(private_key))

# 加密明文
plaintext = b"Hello, world!".ciphertext = cipher.encrypt(pad(plaintext, 256))
print("密文:" ,ciphertext.hex())

# 解密密文
decrypted_text = unpad(decryptor.decrypt(ciphertext), 256)
print("解密后的明文:", decrypted_text.decode())

标签:phi,公钥,加密,RSA,体制,密码,密钥,key
From: https://www.cnblogs.com/ALINGMAOMAO/p/17178138.html

相关文章

  • 服务器 OpenSSH 实现免密码连接
    这个云服务器安装可把我给坑到了。CentOS版本不一样可能会有所区别,我使用的CentOS8.0,系统自带openssh-clients和openssh-server,而有的版本只默认开启clients服务。安装的......
  • vscode连接远程linux服务器免输密码
    在VScode中安装Remote-ssh插件连接到远程服务器1、打开本地cmd,输入以下命令生成密钥id_rsa.pub,一直回车,默认生成到C:\Users\jae.sshssh-keygen-trsa2、打开远程服务......
  • VM安装linux2022、设置root密码、设置国内更新源
    一、创建虚拟机1、打开VM软件选择“创建新的虚拟机”2、选择“典型”即可 3、选择“稍后安装操作系统” 4、选择客户机操作系统为“Linux”5、自定义命名虚拟机......
  • 【CentOS】scp免密码远程拷贝
    https://www.likecs.com/show-307003828.html基于公钥和私钥的信任办法使用root用户,在192.168.0.30和192.168.0.31之间复制文件可以先删除旧文件rm/root/.ssh/......
  • 安全SSH设置免密码登录
    SSH类似于Telnet,可以用来远程操控,但是这种方式走的是明文,这样不安全。安全shell是加过密的,这样就保证安全。1.执行命令,产生秘钥命令:ssh-keygen-t rsa,一直回车,产生两个......
  • 加解密:公钥、私钥和证书
    参考:https://blog.csdn.net/qq_25933249/article/details/100065093理解公钥和私钥首先要区分加密和认证这两个概念!加密和认证加密是将数据资料加密,使别人即使获取加密......
  • Debian设置root开机不用输密码自动登录
    参考http://www.taodudu.cc/news/show-4763067.html 由于博主常用root,且每次开机需要输入账号密码太过麻烦,所以查找取消开机输入root密码的操作,试了网上的很多方法(......
  • 算法刷题-简单密码-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......
  • 【转载】一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥
    说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA)、证书、数字签名、私钥、公钥、对称加密、非对称加密。这些到底有什么用呢,正所谓存在即合理,这篇......
  • mysql忘记密码
    mysql是在三年前下载的,但是此时密码忘记了,又不想卸载后重新安装,此时需要重置密码.①netstopMySQL80(这个SQL根据服务中SQL的名称填写,网上大部分都是sql,我发......