wordpress在裁剪,黑帽seo排名技术,域名跳转,房地产app开发RSA原理
RSA基于一个十分简单的数论事实#xff1a;将两个大素数相乘十分容易#xff0c;但想要对其乘积进行因式分解却极其困难#xff0c;因此可以将乘积公开作为加密密钥#xff0c;即公钥#xff0c;而两个大素数组合成私钥。公钥是可发布的供任何人使用#xff0c;… RSA原理
RSA基于一个十分简单的数论事实将两个大素数相乘十分容易但想要对其乘积进行因式分解却极其困难因此可以将乘积公开作为加密密钥即公钥而两个大素数组合成私钥。公钥是可发布的供任何人使用私钥则为自己所有供解密之用。
RSA公私钥生成流程 随机找两个质数P和QP与Q越大越安全。例如61和53 计算p和q的乘积n。n61×533233n的长度就是密钥长度。3233写成二进制是110010100001一共有12位所以这个密钥就是12位。 计算 n 的欧拉函数φ(n)。根据公式φ(n)(p-1)(q-1)算出φ(3233)等于60×52即3120 随机选择一个整数e条件是1eφ(n)且e与φ(n) 互质。条件是1eφ(n)且e与φ(n) 互质。1到3120之间随机选择了17。 有一个整数d可以使得ed 除以φ(n) 的余数为 1。ed ≡ 1 (mod φ(n))即17*2753 mode 31201 将n和e封装成公钥n和d封装成私钥。n3233e17d2753所以公钥就是3233,17私钥就是3233, 2753。
RSA加密
首先对明文进行比特串分组使得每个分组对应的十进制数小于n然后依次对每个分组m做一次加密所有分组的密文构成的序列就是原始消息的加密结果即m满足0mn则加密算法为cm^e mod n; c为密文且0cn。
RSA解密
对于密文0cn解密算法为mc^d mod n。
RSA加密算法的优缺点
优点RSA算法是国际标准算法属于主流算法之一应用广泛兼容性比较广能够适用于各种不同的系统之中不容易出现限制问题。
缺点RSA算法加密长度为2048位对于服务器的消耗是比较大的计算速度也比较慢效率偏低一般只适用于处理小量数据 RSA python代码
import random
from math import gcd# 生成RSA的公钥和私钥
def generate_rsa_keys():# 选择两个不同的大素数p和qp generate_large_prime()q generate_large_prime()# 计算n和phi(n)n p * qphi_n (p - 1) * (q - 1)# 找到与phi(n)互质的整数ee find_coprime(phi_n)# 计算e关于phi(n)的模逆元dd modular_inverse(e, phi_n)# 返回公钥和私钥public_key (n, e)private_key (n, d)return public_key, private_key# 生成一个大的素数
def generate_large_prime():while True:prime random.randint(2**10, 2**11) # 生成一个随机数if is_prime(prime):return prime# 判断一个数是否为素数
def is_prime(number):if number 2:return Falsefor i in range(2, int(number ** 0.5) 1):if number % i 0:return Falsereturn True# 找到与phi(n)互质的整数
def find_coprime(phi_n):while True:coprime random.randint(2, phi_n)if gcd(coprime, phi_n) 1:return coprime# 计算关于模的逆元
def modular_inverse(number, mod):x, y, _ extended_euclidean_algorithm(number, mod)return x % mod# 扩展欧几里得算法
def extended_euclidean_algorithm(a, b):if b 0:return 1, 0, aelse:x, y, gcd extended_euclidean_algorithm(b, a % b)return y, x - (a // b) * y, gcd# 使用公钥加密数据
def encrypt(message, public_key):n, e public_keyencrypted_message (message ** e) % nreturn encrypted_message# 使用私钥解密数据
def decrypt(encrypted_message, private_key):n, d private_keydecrypted_message (encrypted_message ** d) % nreturn decrypted_message# 示例
public_key, private_key generate_rsa_keys()
message 1234567890
encrypted_message encrypt(message, public_key)
decrypted_message decrypt(encrypted_message, private_key)print(公钥, public_key)
print(私钥, private_key)
print(加密前的数据, message)
print(加密后的数据, encrypted_message)
print(解密后的数据, decrypted_message) RSA 实现 n 选 1 的 OT 协议过程描述
安全多方计算(1):不经意传输协议 - 网安 (wangan.com)