Private key 和 Secret key 的区别

两者都可以用来加密数据,但他们有什么区别呢?


简单来说,二者在加密上使用的技术不同:

  • secret key 是对称加密算法(Symmetric encryption)中的概念,此算法中信息的发送者和接受者拥有相同的secret key来加密和解密信息.

  • private key 是非对称加密(Asymmetric Encryption)算法中的概念,与之对应的是public key,此算法public key是公之于众的,任何人都可以下载,而private key只有自己拥有,发送者使用接收者公之于众的public key加密信息,接收者收到之后用只有自己拥有的secret key来解密信息。

如果想详细学习Java中如何加解密以及签名,可以看下这个,是一个eclipse工程:https://gitee.com/tudoubudou/rsabest-test
直接看注释就秒懂。

非常抱歉,是我疏忽了。在 Flask-JWT-Extended 中,使用非对称加密时的算法应该是 `RS256`,而不是 `HS256`。所以在创建 access token 时,需要将 `algorithm` 参数指定为 `RS256`,并传入私钥的参数名应该是 `private_key`,而不是 `private_key_path`。下面是修改后的代码: ```python from flask import Flask from flask_jwt_extended import JWTManager, jwt_required, create_access_token, get_jwt_identity from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import rsa app = Flask(__name__) app.config['JWT_SECRET_KEY'] = 'super-secret' jwt = JWTManager(app) # 生成公钥和私钥 private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, ) public_key = private_key.public_key() @app.route('/login', methods=['POST']) def login(): # 获取用户信息 username = request.json.get('username', None) password = request.json.get('password', None) # 验证用户信息(这里省略具体实现) if username != 'user' or password != 'pass': return {'msg': '用户名或密码错误'}, 401 # 生成 access token access_token = create_access_token(identity=username, algorithm='RS256', private_key=private_key) return {'access_token': access_token}, 200 @app.route('/protected', methods=['GET']) @jwt_required(algorithms=['RS256'], public_key=public_key) def protected(): # 获取当前用户身份信息 current_user = get_jwt_identity() return {'msg': f'Hello, {current_user}!'}, 200 if __name__ == '__main__': app.run(debug=True) ``` 非常感谢您的指正,我会更加注意代码的准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值