rsa加密demo

选择一对不同的、足够大的素数p,q。

计算n=pq。

计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。

找一个与f(n)互质的数e,且1<e<f(n)。

计算d,使得de≡1 mod f(n)。这个公式也可以表达为d ≡ e-1 mod f(n)
这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。

公钥KU=(e,n),私钥KR=(d,n)。

加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C ≡ M^e mod n。

解密过程为:M ≡ C^d mod n。

摘自http://bank.hexun.com/2009-06-24/118958531.html

n = 33 = p * q = 3 * 11
t = (p - 1) * (q - 1) = 2 * 10 = 20
e = 3

var e = 3, t = 20, d;
for(d = 3; d && d < 10000; d++){ //为了避免死循环,加上d<10000
    if(d * e % t == 1){
        console.log('d=%d',d);
        break;
    }
}

// d = 7
// 
// n = 33
// d = 7
// e = 3
// 
// C = M ^ d % n
// M = C ^ e % n

function rsa(a, k, m) {  // a^k%m 摘自 http://wenku.baidu.com/view/27cea13743323968011c923b.html
    var b = 1;
    while (k >= 1) {
        if (k % 2 == 1){
            b = a * b % m;
        }
        a = a * a % m;
        k = parseInt(k / 2);
    }
    return b;
}

http://www.ohdave.com/rsa/

转载于:https://www.cnblogs.com/arliang/archive/2013/04/16/RSA_demo.html

### RSA 加密简介 RSA 是一种基于大整数分解难题的公钥加密算法,广泛应用于数据传输的安全保护中。其安全性依赖于两个大素数乘积难以因式分解的特点[^1]。 以下是实现 RSA 的基本流程以及 Python 中的一个简单示例: #### 密钥生成过程 1. 随机选择两个不同的大质数 \( p \) 和 \( q \),并计算它们的乘积 \( n = pq \)。 2. 计算欧拉函数 \( φ(n) = (p-1)(q-1) \)。 3. 选取一个小于 \( φ(n) \) 并与其互质的整数 \( e \)(通常取较小值如 65537),作为公钥的一部分。 4. 使用扩展欧几里得算法求出私钥 \( d \),满足 \( ed ≡ 1 (\mod φ(n)) \)。 最终得到一对密钥: - **公钥**:\( (n, e) \) - **私钥**:\( (n, d) \) #### 数据加解密原理 对于消息 \( m \) (需小于模数 \( n \)): - 加密:\( c = m^e \mod n \) - 解密:\( m = c^d \mod n \) --- ### 示例代码 以下是一个简单的 Python 实现,展示如何生成 RSA 密钥并对短消息进行加密和解密: ```python import random from sympy import isprime, mod_inverse def generate_prime(bits=10): """Generate a prime number with specified bit length.""" while True: num = random.getrandbits(bits) if isprime(num): return num def gcd(a, b): """Compute the greatest common divisor of a and b.""" while b != 0: a, b = b, a % b return a def rsa_keygen(p=None, q=None, bits=10): """Generate RSA keys.""" if not p: p = generate_prime(bits) if not q: q = generate_prime(bits) n = p * q phi_n = (p - 1) * (q - 1) # Choose public exponent 'e' e = 65537 # Common choice for 'e', must be coprime with phi(n) assert gcd(e, phi_n) == 1 # Compute private exponent 'd' as modular inverse of e under modulo phi(n) d = mod_inverse(e, phi_n) return ((n, e), (n, d)) def encrypt(message, pubkey): """Encrypt a message using the public key.""" n, e = pubkey ciphertext = pow(message, e, n) return ciphertext def decrypt(ciphertext, privkey): """Decrypt a ciphertext using the private key.""" n, d = privkey plaintext = pow(ciphertext, d, n) return plaintext if __name__ == "__main__": pub, priv = rsa_keygen() print(f"Public Key: {pub}") print(f"Private Key: {priv}") msg = 42 # Example message (must be less than modulus 'n') encrypted_msg = encrypt(msg, pub) decrypted_msg = decrypt(encrypted_msg, priv) print(f"Original Message: {msg}") print(f"Encrypted Message: {encrypted_msg}") print(f"Decrypted Message: {decrypted_msg}") ``` 此代码实现了完整的 RSA 流程,包括密钥生成、加密和解密功能。 --- ### 关联技术对比 同态加密是一种特殊的加密形式,在不解密的前提下支持对密文的操作[^2]。而传统的 RSA 更适合用于保密通信场景下的数据加密与签名验证。两者的主要区别在于应用场景和技术复杂度上。 此外,TLS 协议中的证书管理涉及 OpenSSL 工具链的应用[^3]。虽然 TLS 主要关注的是会话层的安全保障机制,但它也利用了类似的非对称加密方法来交换对称密钥。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值