我的一个python程序,需要AES加密,我通过代码生成一些16位的随机密钥
key = "".join(random.sample(string.ascii_letters + string.digits, 16))
然后为了安全,我将一些密钥先通过MD5加密存在数据库中,像下面这样:
id_stu | md5_key |
---|
20191101 | ca1cea474902d99fc0df068c8b26e29d |
20191102 | 32f4d8b8eb0670d0d39c282c69bfaa93 |
20191103 | 0d3ad80c4aece7fc867c88b949396a51 |
1、但是当我需要对数据进行加密时,我怎么获得我原来没通过MD5加密之前的密钥?如果使用MD5加密后的密钥不就相当于做了无用功吗?
2、如果通过调用函数传递原始密钥,那和直接放在数据库中在调用,哪个更安全些?
基于Monster 组和GPT的调写:
- 1.当需要对数据进行加密时,可以从数据库中取出对应的MD5加密后的密钥,然后再进行解密操作。因为AES加密算法是可逆的,所以只要拥有正确的密钥,就可以解密出原始数据。
- 虽然通过MD5加密后的密钥不同于未加密的随机密钥,但是这种方式仍然是有用的。如果数据库中存储的是明文的随机密钥,那么如果数据库被攻击者窃取,那么所有的数据都会暴露在攻击者面前。而如果数据库中存储的是经过MD5加密的密钥,攻击者即使窃取了数据库也无法轻易地获取原始密钥。
- 2.如果将原始密钥直接放在数据库中,那么数据库被攻击后,所有的原始密钥都将暴露,这样很容易被攻击者利用。相比之下,将加密后的密钥存储在数据库中会更加安全。因为攻击者即使获取了加密后的密钥,也无法轻易地获得原始密钥,除非攻击者拥有足够的计算能力和时间来进行暴力破解。此外,还可以采用一些其他的加密技术来增强数据的安全性,比如采用公钥加密技术来保护密钥的传输过程。
- 这篇博客: Python数据加密中的 常规讲MD5是不存在解密的。但是理论上MD5是可以进行反向暴力破解的。暴力破解的大致原理就是用很多不同的数据进行加密后跟已有的加密数据进行对比,由此来寻找规律。理论上只要数据量足够庞大MD5是可以被破解的。但是要注意,破解MD5是需要考虑破解的成本(时间和机器性能)。假设破解当前的MD5密码需要目前计算能力最优秀的计算机工作100年才能破解完成。那么当前的MD5密码就是安全的。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
你还是先了解一下MD5是干什么的吧。MD5是用来校验的,加密后不能再被解密了。