2

我编写了一个查询 Jira API 的应用程序,该 API 需要我通过基本身份验证(标头中的 base64)提供的身份验证。密码存储在代码中,现在必须停止,因为我想交出代码。

当用户因密码计划更改密码时,应用程序应提示用户输入新的 Jira 密码,安全保存,并通过基本身份验证将其传递给 Jira API。

最好的方法是什么?

通常情况下,我们会对其进行散列,但这是不可能的,因为散列是单向的,我们需要将真实密码传递给 Jira,而不是散列。

4

1 回答 1

1

如果存储需要保护的字符串以防泄露或作为一般软件数据安全问题,则应进行加密。例如,在您的情况下,当用户获取密码时,应在存储前由软件对其进行加密。检索时,密码被解密并转换为 Jira 接受的用于登录握手的哈希值(或 base64)。

除了简单的加密和解密之外,更好的方法是在加密时使用盐,并在循环中使用多个加密以避免暴力尝试。

伪代码:

unsafe_password = getPasswordFromUser()
salt = getRandomString();
safePassword = encrypt(unsafe_password, salt, key)

// Store the password
putEntryInDB(user, safePassword, salt)

// Retrieve password
[passwordSalt, encryptedPassword] = getSaltAndEncryptedPasswordFromDB()

unsafePassword = decrypt(encryptedPassword, passwordSalt, key)

// Now login into Jira with the actual user's password (unsafePassword)

P.S. You'll be needing to store a key in the code or in some software's configuration.

来源:尝试 4&5 https://nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/

于 2019-06-26T06:43:57.017 回答