RSA非对称加密算法

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 本实验带您实现了解并使用非对称加密与RSA算法。

RSA非对称加密算法

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

在实验室页面,单击创建资源。

(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. 实验原理

实验原理

非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。使用公开密钥密码的每一个用户都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥在计算机上是不可行的。每一个用户的加密密钥都是公开的。因此,加密密钥也称为公开密钥(公钥)。所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,这样每一个用户都可以得到其他所有用户的公开密钥。同时,每一个用户的解密密钥将由用户保存并严格保密。因此,解密密钥也称为私有密钥(私钥)

非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。公钥加密算法一般是将对密钥的求解转化为对数学上的困难问题的求解,例如RSA 算法的安全性是建立在 “大数分解和素性检测”这个数论难题的基础上。

RSA加密算法于1977 年由美国麻省理工学院的Ronal Rivest,Adi Shamir和Len Adleman三位年轻教授提出,并以三人的姓氏Rivest,Shamir和dleman命名为RSA算法。这三位科学家荣获2002年度图灵奖,以表彰他们在算法方面的突出贡献。该算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数的乘积却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。它无须收发双方同时参与加密过程,既可以用于保密也可以用于签名,因而非常适合于电子邮件系统的加密,互联网和信用卡安全系统。

RSA参数生成

生成两个大素数𝑝和𝑞

𝑛 = 𝑝𝑞, 且 𝜙(𝑛) = (𝑝−1)(𝑞−1)

选择一个随机数 𝑒 (1<𝑒<𝜙(𝑛)),使得 𝑔𝑐𝑑(𝑒,𝜙(𝑛)) = 1

𝑑𝑒 ≡ 1 𝑚𝑜𝑑 𝜙(𝑛)

公钥 𝑃𝐾 = {𝑒, 𝑛},私钥 𝑆𝐾 = {𝑑, 𝑛}

RSA加密解密过程

加密:对于明文分组𝑀,密文分组C:

解密:对于密文分组𝐶,明文分组M:

(注意:明文M的二进制值必须比 𝑛 小)

3. 实验内容

实验内容

编写代码实现RSA加密解密程序。每个同学选取自己学号的后五位(或一个相近的素数)作为𝑒,然后随机选取满足条件的𝑝、𝑞和𝑑,要求𝑝和𝑞的二进制长度不小于128bit

以一段自选的明文作为输入,每个英文字母对应一个数字,规则如下:每个字母或数字与一个两位的十进制数字对应,(如:数字为00-09,𝑎=10,𝐴=36),明文的一个分组块由4个十进制数字组成,即两个字母。去掉空格和其他标点符号。

分别用公钥加密私钥解密和私钥加密公钥解密。

将𝑝, 𝑞, 𝑛, 𝑒, 𝑑, 𝜙(𝑛)的值以及两种不同方式加密后的密文、解密后的明文输出到文件或屏幕。

独立完成实验报告(包含实验思路,实验结果截图等),提供源代码,不得抄袭。可以使用开源运算库(例如:GMP),推荐用Python。

# -*- coding: utf-8 -*-
# Created by Zheng Yuntao
import sys
def is_prime(n, k=128):
    """
    Test if a number is prime
    Args:
        n -- int -- the number to test
        k -- int -- the number of tests to do
    return True if n is prime
    """
    # Test if n is not even.
    # But care, 2 is prime !
    # WRITE YOUR CODE HERE!
def generate_prime_candidate(length):
    """
    Generate an odd integer randomly
    Args:
        length -- int -- the length of the number to generate, in bits
    return a integer
    """
    # WRITE YOUR CODE HERE!
def generate_prime_number(length):
    """
    Generate a prime
    Args:
        length -- int -- length of the prime to generate, in length bits
    return a prime
    """
    # keep generating while the primality test fail
    # WRITE YOUR CODE HERE!
class RSA(object):
    def __init__(self, e):
        # decide the parameter e by your student ID 
        self.e = e
    def _egcd(self, a, b):
        """
        extended gcd
        """
        # WRITE YOUR CODE HERE!
    def _modinv(self, a, m):
        '''
        calulcate solution of a*x mod m = 1 
        http://stackoverflow.com/a/9758173
        '''
        # WRITE YOUR CODE HERE!
    def generate_key(self):
        '''
        randomly generate the public and private key
        the class doesn't store the keys
        '''
        # WRITE YOUR CODE HERE!
    def encrypt(self, key, plain_text):
        '''
        using the key (public/private) to encrypt the plain text
        '''
        # WRITE YOUR CODE HERE!
    def decrypt(self, key, cipher_text):
        '''
        using the key (public/private) to decrypt the cipher text
        '''
        # WRITE YOUR CODE HERE!
if __name__ == '__main__':
    num_e="your student ID"
    rsa = RSA(num_e)
    '''
    call generate key and encrypt/decrypt the plaintext
    '''
    # WRITE YOUR CODE HERE!

实验链接:https://developer.aliyun.com/adc/scenario/be4a144866a943edbf01a5cb8edb00d3


相关文章
|
5月前
|
安全 算法 网络安全
浅谈非对称加密(RSA)
浅谈非对称加密(RSA)
211 0
|
2月前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
64 12
|
4月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
318 1
|
4月前
|
算法 安全 网络安全
使用 Python 实现 RSA 加密
使用 Python 实现 RSA 加密
166 2
|
5月前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
179 5
|
5月前
|
安全 算法 数据安全/隐私保护
深度揭秘!Python加密技术的背后,AES与RSA如何守护你的数据安全
【9月更文挑战第10天】随着数字化时代的到来,数据安全成为企业和个人面临的重大挑战。Python 作为功能强大的编程语言,在数据加密领域扮演着重要角色。AES 和 RSA 是两种主流加密算法,分别以对称和非对称加密方式保障数据安全。AES(Advanced Encryption Standard)因其高效性和安全性,在数据加密中广泛应用;而 RSA 则利用公钥和私钥机制,在密钥交换和数字签名方面表现卓越。
102 3
|
5月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
112 1
|
5月前
|
安全 算法 数据安全/隐私保护
黑客克星!Python加密艺术大公开,AES、RSA双剑合璧,守护你的数字世界
在这个数据泛滥的时代,数字世界既充满了知识,也潜藏安全隐患。Python 作为强大的编程语言,以其独特的加密技术为我们的信息安全保驾护航。本文将介绍 AES 和 RSA 这两种加密算法,揭示它们如何协同工作,保护你的数字世界。AES(高级加密标准)以其高效、安全著称,能将敏感信息转化为难以破解的乱码。Python 的 `pycryptodome` 库让 AES 加密变得简单易行。然而,AES 面临密钥分发难题,此时 RSA(非对称加密算法)便大显身手,通过公钥加密、私钥解密的方式确保密钥传输安全。AES 与 RSA 在 Python 中交织成一道坚不可摧的防护网,共同守护我们的数字世界。
108 0
|
2月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
2月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。