我们有一个场景,在这个场景中,我们的角度应用程序调用我们的后端API(使用django rest框架开发)。我们使用Jwt进行API身份验证。我们有一个端点url,它接受用户名和密码(POST请求),并使用django后端对用户进行身份验证。我们已经在APACHE上部署了应用程序,并使用SSL (Https)进行加密。
但是我们也希望加密请求有效负载(发送到django API的数据)。在当前情况下,从角应用程序加密用户名和密码,并在django中解密相应的数据。为此,我们在角应用程序中使用CryptoJs,在Django中使用Pycrypto。但我们无法解密django中的数据。
以下是我们在django应用程序上使用的解密函数代码:
MODE = AES.MODE_CBC
key = 'k%eu6sy)h&vue#5yrpok#1)^1ya#l1t('
def decrypt(ciphertext,key, mode):
encobj = AES.new('k%eu6sy)h&vue#5yrpok#1)^1ya#l1t(', AES.MODE_CBC)
decrypted = encobj.decrypt(ciphertext)
return decrypted.decode('utf-8')
ciphertext_user_name=request.data['username'].encode("utf8")
ciphertext_pwd=request.data['password'].encode("utf8")
usr = decrypt(ciphertext_user_name,key,MODE)
pwd = decrypt(ciphertext_pwd,key,MODE)我们在CryptoJs中也使用CBC模式。
上面的代码只是一个示例代码。有人能建议,这是正确的方法去,还是我们应该改变方法,做其他的事情。
提前谢谢!
发布于 2019-04-09 11:50:28
有人能建议,这是正确的方法吗?
为什么要单独加密有效负载(ssl之外)?
当涉及凭据(用户名、密码)时,如果您在浏览器中加密,则需要在脚本中的某个地方有一个密钥。这并不会增加安全性,只会增加解决方案的复杂性。
您可以使用非对称密码(RSA,ECC)来使用服务器的公钥加密数据。哦,等等- HTTPS已经为你做过了。
客户端加密可能位于您不希望服务器访问数据的位置(例如,安全消息传递、密码管理器、.),但是对于用户名和密码,服务器无论如何都需要读取和处理凭据。
但我们无法解密django中的数据。
在这里,我们不知道如何加密客户端的数据。您可以尝试编辑您的问题并添加加密代码和错误消息。
或者我们应该改变方法,做点别的
虽然您的代码中肯定有一些问题(我无法判断是否都是这些问题)
所有这些都已经使用HTTPS完成(并且做得很好),所以您只是尝试实现另一层加密,没有真正的增值(以及明显的弱点)。我相信大家的建议是有信心地依赖HTTPS。
https://stackoverflow.com/questions/55586710
复制相似问题