首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加密角app和django应用程序之间的数据解密

如何加密角app和django应用程序之间的数据解密
EN

Stack Overflow用户
提问于 2019-04-09 06:51:31
回答 1查看 2.4K关注 0票数 1

我们有一个场景,在这个场景中,我们的角度应用程序调用我们的后端API(使用django rest框架开发)。我们使用Jwt进行API身份验证。我们有一个端点url,它接受用户名和密码(POST请求),并使用django后端对用户进行身份验证。我们已经在APACHE上部署了应用程序,并使用SSL (Https)进行加密。

但是我们也希望加密请求有效负载(发送到django API的数据)。在当前情况下,从角应用程序加密用户名和密码,并在django中解密相应的数据。为此,我们在角应用程序中使用CryptoJs,在Django中使用Pycrypto。但我们无法解密django中的数据。

以下是我们在django应用程序上使用的解密函数代码:

代码语言:javascript
复制
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模式。

上面的代码只是一个示例代码。有人能建议,这是正确的方法去,还是我们应该改变方法,做其他的事情。

提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-04-09 11:50:28

有人能建议,这是正确的方法吗?

为什么要单独加密有效负载(ssl之外)?

当涉及凭据(用户名、密码)时,如果您在浏览器中加密,则需要在脚本中的某个地方有一个密钥。这并不会增加安全性,只会增加解决方案的复杂性。

您可以使用非对称密码(RSA,ECC)来使用服务器的公钥加密数据。哦,等等- HTTPS已经为你做过了。

客户端加密可能位于您不希望服务器访问数据的位置(例如,安全消息传递、密码管理器、.),但是对于用户名和密码,服务器无论如何都需要读取和处理凭据。

但我们无法解密django中的数据。

在这里,我们不知道如何加密客户端的数据。您可以尝试编辑您的问题并添加加密代码和错误消息。

或者我们应该改变方法,做点别的

虽然您的代码中肯定有一些问题(我无法判断是否都是这些问题)

  • 密文(加密数据)通常是二进制的(具有不可打印的字符).这就是为什么在作为参数传递时,数据通常被编码为可打印的公共字符(十六进制、base64、..)。我看到您直接解密参数,您确定数据没有正确编码/发布吗?
  • 我看到您没有使用任何IV ( CBC模式的初始化向量)。我假设您所使用的库将只使用零数组IV。使用静态/零IV对于CBC模式(或一般情况下的任何模式)来说都是非常不安全的。你确定客户不包括静脉注射吗?
  • CBC模式是可扩展的,您应该应用一些完整性检查(客户端脚本中的完整性秘密也不会增加任何价值)

所有这些都已经使用HTTPS完成(并且做得很好),所以您只是尝试实现另一层加密,没有真正的增值(以及明显的弱点)。我相信大家的建议是有信心地依赖HTTPS。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55586710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档