后端_第七课_非对称加密

TIPS

  • 非对称加密

    1. 能“撞”上的保险箱(非对称/公钥加密体制,Asymmetric / Public Key Encryption)
      数据加密解密和门锁很像。最开始的时候,人们只想到了那种只能用钥匙“锁”数据的锁。如果在自己的电脑上自己加密数据,当然可以用最开始这种门锁的形式啦,方便快捷,简单易用有木有。
      但是我们现在是通信时代啊,双方都想做安全的通信怎么办呢?如果也用这种方法,通信就好像互相发送密码保险箱一样… 而且双方必须都有钥匙才能进行加密和解密。也就是说,两个人都拿着保险箱的钥匙,你把数据放进去,用钥匙锁上发给我。我用同样的钥匙把保险箱打开,再把我的数据锁进保险箱,发送给你。大概就这么个样子:
      于是,人们想到了“撞门”的方法。我这有个可以“撞上”的保险箱,你那里自己也买一个这样的保险箱。通信最开始,我把保险箱打开,就这么开着把保险箱发给你。你把数据放进去以后,把保险箱“撞”上发给我。撞上以后,除了我以外,谁都打不开保险箱了。这样听起来好像很合理的样子,大概是这么个情况:
  • 公钥私钥

    首先,每个用户都有两把钥匙,一把公钥一把私钥。公钥是对外发布的,所有人都看的到所有人的公钥,私钥是自己保存,每个人都只知道自己的私钥而不知道别人的。
    用该用户的公钥加密后只能该用户的私钥才能解密。这种情况下,公钥是用来加密信息的,确保只有特定的人(用谁的公钥就是谁)才能解密该信息。
    下面我拿A银行和小明来举例子吧。假设这2者之间是用不对称的加密算法来保证信息传输的安全性(不被第三人知道信息的含义及篡改信息)。大致流程如下:首先小明发了一条信息给A银行“我要存500元”。这条信息小明会根据A银行的对外发布的公钥把这条信息加密了,加密之后,变成“XXXXXXX”发给A银行。中间被第三者截获,由于没有A银行的私钥无法解密,不能知道信息的含义,也无法按正确的方式篡改。所以拿这条加密信息是没办法的。最后被A银行接受,A银行用自己的私钥去解密这条信息,解密成功,读取内容,执行操作。然后得知消息是小明发来的,便去拿小明的公钥,把“操作成功(或失败)”这条信息用小明的公钥加密,发给小明。同理最后小明用自己的私钥解开,得知知乎发来的信息内容。其他人截获因为没有小明的私钥所以也没有用。 转自:https://www.zhihu.com/question/33645891/answer/57512229

  • WEIBO的首页.展示了微博账户发表过的评论,然后每条评论底下还有各自的追评。方法是在.HTML文件用JINJA 渲染时,先用FOR循环在WEIBO的DATA中选择该USER发过的评论,再嵌套一个FOR循环用每条微博评论的ID在COMMENT的DATA中寻找符合这个评论_ID的DATA,返回在这条评论底下的追评。

  • 字典

 m = {'wocao':33,'wori':22}
for key in m:
    print(key)  #打印的是字典的KEY
  • #追加文件
    with open('log.gua.txt', 'a', encoding='utf-8') as f:
        print(dt, *args, **kwargs) #打印在命令行窗口
        print(dt, *args, file=f, **kwargs)  #打印到文件里。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
flask_jwt_extended是一个用于Flask应用程序的JSON Web Token (JWT)扩展,它可以帮助你轻松地保护你的API。下面是一个使用RSA非对称加密的示例: 1. 安装所需的依赖 ``` pip install flask flask_jwt_extended cryptography ``` 2. 生成RSA密钥对 ``` from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, ) public_key = private_key.public_key() # 保存私钥 with open('private_key.pem', 'wb') as f: f.write(private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() )) # 保存公钥 with open('public_key.pem', 'wb') as f: f.write(public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo )) ``` 3. 使用RSA密钥对进行JWT签名和验证 ``` from flask import Flask, jsonify from flask_jwt_extended import JWTManager, create_access_token, jwt_required from cryptography.hazmat.primitives import serialization from cryptography.hazmat.backends import default_backend app = Flask(__name__) app.config['JWT_SECRET_KEY'] = 'super-secret' # 这个密钥不用于签名,只用于加密 app.config['JWT_ALGORITHM'] = 'RS256' jwt = JWTManager(app) # 加载RSA密钥 with open('private_key.pem', 'rb') as f: private_key = serialization.load_pem_private_key( f.read(), password=None, backend=default_backend() ) with open('public_key.pem', 'rb') as f: public_key = serialization.load_pem_public_key( f.read(), backend=default_backend() ) @app.route('/login') def login(): access_token = create_access_token( identity='user_id', algorithm='RS256', private_key=private_key ) return jsonify(access_token=access_token) @app.route('/protected') @jwt_required(algorithms=['RS256'], public_key=public_key) def protected(): return jsonify({'message': 'protected'}) if __name__ == '__main__': app.run() ``` 在这个示例中,我们使用RSA非对称加密算法来对JWT进行签名和验证。在生成JWT时,我们使用私钥来签名,而在验证JWT时,我们使用公钥来验证签名。使用RSA非对称加密算法可以更安全地保护JWT。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值