- 对接第三方系统时:RSA会存在秘钥的格式的区别:pkcs1和pkcs8
pkcs8是java可用rsa秘钥格式
2.使用RSA加密的时候,通常会使用base64进行转码,为了保证转码后的url链接能够访问需要对加密的字符串特殊字符进行转换通常有
+转换为-
/转化为_
=转化为空格
所以我们在解密字符串的时候需要转化回去,再解密
3. 对长字符串加密解密需要截取字符串分段加密:
def public_long_encrypt(self, data, charset='utf-8'):
data = data.encode(charset)
length = len(data)
default_length = 117
res = []
for i in range(0, length, default_length):
res.append(self.pub_key_obj.encrypt(data[i:i + default_length]))
byte_data = b''.join(res)
return base64.urlsafe_b64encode(byte_data)
def private_long_decrypt(self, data, sentinel=b'decrypt error'):
str_data = data+"="
data = base64.urlsafe_b64decode(str_data)
length = len(data)
default_length = 128
res = []
for i in range(0, length, default_length):
res.append(self.pri_key_obj.decrypt(data[i:i + default_length], sentinel))
return str(b''.join(res), encoding = "utf-8")
4.使用RSA去传递参数时一般要配合sign签名使用,设计接口为保证数据和系统的安全性
我一般采用 MD5(RSA(json)+key) 作为签名