美文网首页
【SQLAlchemy】基于RSA双向加密存储

【SQLAlchemy】基于RSA双向加密存储

作者: Allennnnnnn | 来源:发表于2019-01-08 11:06 被阅读0次

用sqlalchemy的时候要实现密码的双向加密不方便调用mysql的ENCODE函数

这里给出一个基于rsa实现双向加密,在sqlalchemy定义model的时候用起来很方便,其他ORM应该也能采用相同的思路(话说我也不知道mysql是基于什么双向加密的)

加密解密函数

import rsa
def encrypt(msg, priv_str):
    if isinstance(msg, str):
        msg = msg.encode()
    if isinstance(priv_str, str):
        priv_str = priv_str.encode()
    privkey = rsa.PrivateKey.load_pkcs1(priv_str)
    return rsa.encrypt(msg, privkey)

def decrypt(msg, priv_str):
    if isinstance(msg, str):
        msg = msg.encode()
    if isinstance(priv_str, str):
        priv_str = priv_str.encode()
    privkey = rsa.PrivateKey.load_pkcs1(priv_str)
    return rsa.decrypt(msg, privkey).decode('utf-8')

有几个注意的地方:

  • 参数是私钥字符串,因为直接从rem文件读取比较方便
  • rsa加解密函数返回的都是bytes
  • 解密decode了加密没有,是因为rsa加密后的bytes是没法decode到utf-8的,所以存储类型是Binary。这点在http发送签名的时候会出现坑,那就是另外的故事了

model定义

class User(Base):
    _pw = Column(Binary)

    @property
    def pw(self):
        with open('private.rem', 'r') as f:
            return decrypt(self._pw, f.read())
    @pw.setter
    def pw(self, pw):
        with open('private.rem', 'r') as f:
            self._pw = encrypt(pw, f.read())
    def pw_verify(self, pw):
        return pw == self.pw
# Usage
user = User(pw='password')
user.pw = 'password'
print(user.pw) # 'password'
print(user._pw) # b'eK:\x0f)\xa7}Gx\xe6\xfd\x14\xf3\xd8\xf1\x08f\xac\xdbL\xf23\x07#\...'

这里没啥说的,就是用了property装饰器。

有个问题是,如果在初始化对象的时候给pw赋值,能行是能行,IDE不干,非要给你标出来,强迫症就很烦,我都在下一行赋

相关文章

  • 【SQLAlchemy】基于RSA双向加密存储

    用sqlalchemy的时候要实现密码的双向加密不方便调用mysql的ENCODE函数 这里给出一个基于rsa实现...

  • kotlin版本RSA非对称加密解密与分段加密解密

    基于kotlin语言的RSA非对称加密解密与分段加密解密 RSA非对称加密 RSA非对称加密的具体算法与来源我就不...

  • iOS之RSA加密解密与后台之间的双向加密详解

    原文iOS之RSA加密解密与后台之间的双向加密详解openssl生成RSA格式的公私钥,并转为pkcs8格式 序言...

  • RSA加解密演算与暴力破解12位

    RSA号称地球上最安全的加密算法,https、ssl、网银密码等大多都是基于RSA加密的。那么RSA的基本原理是什...

  • iOS之工具集

    1、iOS之RSA加密解密与后台之间的双向加密参考资料:https://www.jianshu.com/p/43f...

  • 3.2 RSA算法简介

    非对称加密技术 -- RSA算法 RSA算法是流行最广泛的非对称加密算法,也是唯一的基于因式分解的非对称加密算法。...

  • RSA双向加密坑_大坑

    公司最近新做了一个项目,要求RSA非对称加密。 然后我就找了找之前的轮子,HBRSAHandler ,不知道大伙用...

  • RSA加密

    RSA基本原理: RSA加密算法是基于一个密钥对的,分为公钥和私钥,一般情况公钥加密,私钥解密,但也可私钥加密,公...

  • 不对称加密

    RSA RSA 基于大数难以进行质因数分解来设计的。加密等级越高,RSA 位数越长越安全,现在一般都是 1024b...

  • 常用的加密算法

    概述 加密算法分为单向加密和双向加密,明文数据通过加密后传输,以确保传输和存储安全 单向加密包括 MD5、SHA、...

网友评论

      本文标题:【SQLAlchemy】基于RSA双向加密存储

      本文链接:https://www.haomeiwen.com/subject/belvrqtx.html