【问题标题】:how to encrypt decrypt data between angular app and django app如何在 Angular 应用程序和 django 应用程序之间加密解密数据
【发布时间】:2019-04-09 06:51:31
【问题描述】:

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

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

这是我们在django app上使用的解密函数代码:

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 模式。

以上代码只是一个示例代码。有人可以建议,这是正确的方法吗,或者我们应该改变方法并做其他事情。

提前致谢!

【问题讨论】:

    标签: encryption cryptojs pycrypto


    【解决方案1】:

    有人可以建议,这是正确的方法吗

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

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

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

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

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

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

    或者我们应该改变方法并做其他事情

    虽然您的代码中肯定存在一些问题(我无法判断是不是全部问题)

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

    这一切都已经使用 HTTPS 完成(并且做得很好),因此您只是尝试实施另一层加密,但没有真正增加价值(以及明显的弱点)。我相信这里的常见建议是自信地依靠 HTTPS

    【讨论】:

    • 感谢 gusto2 的澄清。我们将只使用 HTTPS。
    猜你喜欢
    • 2012-07-02
    • 2011-10-07
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多