RSA,JWT和Micro微服务框架的权限管理系统

文章目录关于RSA简介关于PKCSgo语言实践生成公钥和私钥私钥签名公钥验证公钥加密私钥解密关于JWT简介go语言实践生成JWT字符串解析JWT字符串源码小探Micro微服务框架的权限管理Micro框架权限管理总览Micro框架内JWT的使用生成JWT验证JWT小结关于RSA简介RSA作为著名的非对称加密算法,在计算机世界里有着广泛的应用。相对于加密和解密都使用同一份秘钥的对称加密,非对称加密将秘钥分为公钥和私钥两种。加密的时候使用私钥进行加密,加密的内容可以使用公钥进行解密,即达到了非对称加密的效
摘要由CSDN通过智能技术生成

关于RSA

简介

RSA作为著名的非对称加密算法,在计算机世界里有着广泛的应用。

相对于加密和解密都使用同一份秘钥的对称加密,非对称加密将秘钥分为公钥和私钥两种。加密的时候使用私钥进行加密,加密的内容可以使用公钥进行解密,即达到了非对称加密的效果。具体原理就不展开了。

关于PKCS

根据维基百科:

公钥加密标准(Public Key Cryptography Standards, PKCS),此一标准的设计与发布皆由RSA信息安全公司所制定。

PKCS标准有多套,一般以PKCS #X的形式命名(PKCS #1、PKCS #2等)。下文示例代码遵循的是**PKCS #1 v1.5.**标准,在程序中也有体现。

go语言实践

参考例子:Golang RSA加密解密程序 - 云+社区 - 腾讯云 (tencent.com)

go语言里有专门进行RSA相关操作的包crypto/rsa,我们可以使用它实现RSA加密解密相关的操作。

生成公钥和私钥

使用rsa.GenerateKey方法生成公钥和私钥:

// GenerateKey generates an RSA keypair of the given bit size using the
// random source random (for example, crypto/rand.Reader).
func GenerateKey(random io.Reader, bits int) (*PrivateKey, error) {
   
	...
}

其中PrivateKey结构包含了PublicKey

// A PrivateKey represents an RSA key
type PrivateKey struct {
   
	PublicKey            // public part.
    ...
}
私钥签名

使用rsa.SignPKCS1v15方法传入私钥,生成签名。

// SignPKCS1v15 calculates the signature of hashed using
// RSASSA-PKCS1-V1_5-SIGN from RSA PKCS #1 v1.5.  
// ...
func SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error) {
   
	...
}

由注释可知,使用RSASSA-PKCS1-V1_5-SIGN方法对哈希字符串进行签名。

公钥验证

使用rsa.VerifyPKCS1v15传入公钥,可对签名进行认证。

// VerifyPKCS1v15 verifies an RSA PKCS #1 v1.5 signature.
// ...
func VerifyPKCS1v15(pub *PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error {
   
    ...
}

可以看到和签名的方法是镜像的。

公钥加密

使用rsa.EncryptPKCS1v15传入公钥和需要加密的数据进行加密。

// EncryptPKCS1v15 encrypts the given message with RSA and the padding
// scheme from PKCS #1 v1.5.  The message must be no longer than the
// length of the public modulus minus 11 bytes.
// ...
func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) ([]byte, error) {
   
    ...
}
私钥解密

使用rsa.DecryptPKCS1v15传入私钥,对加密的数据进行解密。

// DecryptPKCS1v15 decrypts a plaintext using RSA and the padding scheme from PKCS #1 v1.5.
// If rand != nil, it uses RSA blinding to avoid timing side-channel attacks.
// ...
func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) ([]byte, error) {
   
    ...
}

与加密的方法是镜像的。

对于私钥,还需要通过x509.MarshalPKCS1PrivateKeyx509.ParsePKCS1PrivateKey将私钥和PKCS #1标准格式的秘钥互转,具体实现见示例。

关于JWT

简介

jwt.go项目里,作者对什么是JWT进行了简短而明确的说明:

JWT.io has a great introduction to JSON Web Tokens.

In short, it’s a signed JSON object that does something useful (for example, authentication). It’s commonly used for Bearer tokens in Oauth 2. A token is ma

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
若依微服务框架可以通过加密器对请求响应数据进行加密。具体实现步骤如下: 1.在pom.xml文件中添加依赖: ```xml <dependency> <groupId>com.github.lxy19900316</groupId> <artifactId>encrypt-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> ``` 2.在application.yml文件中添加配置: ```yaml encrypt: aes: key: 1234567890123456 # AES加密秘钥,必须为16位 rsa: private-key: | -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC3zJZzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5 zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5 zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5 zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5 zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5 zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5z jJzvJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJZ5zjJZ5zjJzvJZ5zjJzvJZ5zjJzvJZ5zjJ Z5zjJzvJZ5zjJzv

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值