信息安全第三周++

公钥加密算法

公钥加密算法,也被称为非对称加密算法,是现代加密技术的核心概念。与传统的对称加密算法不同,非对称加密使用一对密钥:一个公钥和一个私钥。以下是公钥加密算法的基本思想和工作原理:

  1. 密钥对:在非对称加密中,生成两个密钥。其中一个是公开的,称为公钥;另一个是保密的,称为私钥。这两个密钥是数学上相关的,但在现实情况下,从公钥计算私钥是不切实际的。

  2. 加密和解密

    • 使用公钥加密:任何人都可以使用公钥来加密信息,但只有私钥的持有者才能解密它
    • 使用私钥加密:私钥的持有者可以使用它来加密信息,然后任何人都可以使用相应的公钥来解密它。这种方法常用于数字签名,而不是加密。辨认一个消息是否是来自于某人,只要用对应的公钥试一试看能不能解密就行了。先签名,再加密。再解密,再验证签名。
  3. 数字签名:除了加密功能外,非对称加密也用于数字签名。签名是使用私钥对数据的摘要进行加密的过程。接收方可以使用公钥解密并验证签名,从而验证数据的完整性和来源。

  4. 性能:由于涉及到复杂的数学运算,公钥加密通常比对称加密要慢得多。因此,在实际应用中,常常使用公钥加密来加密对称密钥,然后使用这个对称密钥来加密实际的数据。

  5. 密钥管理:公钥加密简化了密钥管理的问题。因为公钥可以被公开,所以只需要保护私钥。而在对称加密中,加密和解密使用同一个密钥,如果需要与多人或多个组织共享,密钥管理就会变得复杂。

  6. 证书和公钥基础设施(PKI):为了验证公钥的所有者,可以使用证书。证书是由可信任的第三方机构(如证书颁发机构)签发的,证明特定的公钥确实属于声明的持有者。PKI是管理这些证书的结构和策略。

公钥加密算法的著名例子包括RSA、ElGamal和Elliptic Curve Cryptography(ECC)。这些算法都为提供安全通信、数据保护和数字签名提供了坚实的基础。

RSA概念

  • 数据库通常包含敏感数据,如用户密码、财务信息等。尽管对称加密(如AES)是数据库加密的主要方法,但公钥加密在某些场景下也很有用。
  • 比如,用户密码可以通过公钥加密存储,然后只有拥有私钥的授权实体可以访问原始密码。
  • 在客户端和数据库服务器之间建立安全连接时,SSL/TLS(使用公钥加密技术)通常用于初始的握手过程,以安全地交换对称密钥。

 

RSA的Python实践

二话不说,上代码:

import rsa

def generate_keypair(bits=2048):
    """
    生成RSA密钥对。
    """
    (public_key, private_key) = rsa.newkeys(bits)
    return private_key, public_key

def encrypt_with_public_key(public_key, plaintext):
    """
    使用公钥加密明文。
    """
    try:
        encrypted_data = rsa.encrypt(plaintext.encode(), public_key)
        return encrypted_data
    except Exception as e:
        print(f"Error encrypting message: {e}")
        return None

def decrypt_with_private_key(private_key, encrypted_data):
    """
    使用私钥解密密文。
    """
    try:
        decrypted_data = rsa.decrypt(encrypted_data, private_key).decode()
        return decrypted_data
    except Exception as e:
        print(f"Error decrypting message: {e}")
        return None

if __name__ == '__main__':
    private_key, public_key = generate_keypair()
    print("Private Key:", private_key)
    print("Public Key:", public_key)

    message = "Hello, RSA!"
    encrypted_message = encrypt_with_public_key(public_key, message)
    if encrypted_message:
        print("Encrypted:", encrypted_message)

        decrypted_message = decrypt_with_private_key(private_key, encrypted_message)
        if decrypted_message:
            print("Decrypted:", decrypted_message)

很明显,首先,生成公钥私钥,再利用公钥加密,私钥解密。其结果图如下:

Private key和Public key很长很长……

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joy T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值