RSA加密原理------真—简洁介绍(拒绝花里胡哨)

前言

复习一手rsa加密,感觉已经有点记不清了

找出质数

找出质数

P Q

计算公共模数

计算公共模数

N = P*Q

计算欧拉函数

计算欧拉函数

φ(N)= (P-1)*(Q-1)

计算公钥

计算公钥E
E的取值必须是整数,E和φ(N)必须是互质数

1<E<φ(N)

计算私钥

计算私钥D

E*D%φ(N)=1

加密

加密
M的E次方,不是异或

C=M^E mod N

C是密文

解密

解密

M=C^D mod N

M是明文

附一个python代码

加密

import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5

public_key = """-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXddSrqcIqW7DT8FioLigAhkzb
acDSSrrDfcd1TFnDEuQgyxDKoqmcE5pcoNkPZXJHAaf826igF9KHhRhnCeRvs7b8
By3njyseQ3cThjyq+csLHhrlL5Hhf/mVj8TBvyJSRInYHFPIojGFsVjOiIaOUxnp
Ut9uzfCY6K7qf3EOxwIDAQAB
-----END PUBLIC KEY-----
"""

text = 'abcdefg'
a = bytes(msg, encoding="utf8")
rsakey = RSA.importKey(public_key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
cipher_text = base64.b64encode(cipher.encrypt(a))
print(cipher_text)

解密

import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5

decodeStr = base64.b64decode(cipher_text)  # cipher_text是上面rsa加密的内容
prikey = Cipher_pkcs1_v1_5.new(RSA.importKey(private_key))
encry_text = prikey.decrypt(decodeStr, b'rsa') 
encry_value = encry_text.decode('utf8')
print(encry_value)  # abcdefgh
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ECDHE_RSA和P-256都是TLS协议中的加密算法和密钥交换算法。其中,ECDHE_RSA是一种基于椭圆曲线的密钥交换算法,P-256是一种椭圆曲线加密算法,它们通常一起使用以提供更高的安全性。 具体来说,ECDHE_RSA是一种基于椭圆曲线的密钥交换算法,它使用ECDH算法来协商一个临时密钥,然后使用RSA算法对该密钥进行签名,以确保密钥的机密性和完整性。而P-256是一种椭圆曲线加密算法,它使用基于椭圆曲线的数学问题来保护数据的机密性。 如果您想在Java中使用ECDHE_RSA和P-256,可以使用Java Cryptography Extension (JCE)提供的相应算法。具体来说,您可以使用SunJCE提供的ECDHE_RSA和P-256算法,如下所示: ```java import javax.crypto.Cipher; import javax.crypto.KeyAgreement; import javax.crypto.SecretKey; import javax.crypto.spec.GCMParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.*; import java.security.spec.ECGenParameterSpec; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.Arrays; public class ECDHE_RSA_P256 { public static void main(String[] args) throws Exception { // Generate ECDH key pair KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC"); ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1"); kpg.initialize(ecSpec); KeyPair kp = kpg.generateKeyPair(); // Generate RSA key pair KeyPairGenerator kpg2 = KeyPairGenerator.getInstance("RSA"); kpg2.initialize(2048); KeyPair kp2 = kpg2.generateKeyPair(); // Generate shared secret using ECDH KeyAgreement ka = KeyAgreement.getInstance("ECDH"); ka.init(kp.getPrivate()); ka.doPhase(kp2.getPublic(), true); byte[] sharedSecret = ka.generateSecret(); // Sign shared secret using RSA Signature sig = Signature.getInstance("SHA256withRSA"); sig.initSign(kp2.getPrivate()); sig.update(sharedSecret); byte[] signature = sig.sign(); // Verify signature using RSA sig.initVerify(kp2.getPublic()); sig.update(sharedSecret); boolean verified = sig.verify(signature); System.out.println("Signature verified: " + verified); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值