我编写了一个查询 Jira API 的应用程序,该 API 需要我通过基本身份验证(标头中的 base64)提供的身份验证。密码存储在代码中,现在必须停止,因为我想交出代码。
当用户因密码计划更改密码时,应用程序应提示用户输入新的 Jira 密码,安全保存,并通过基本身份验证将其传递给 Jira API。
最好的方法是什么?
通常情况下,我们会对其进行散列,但这是不可能的,因为散列是单向的,我们需要将真实密码传递给 Jira,而不是散列。
我编写了一个查询 Jira API 的应用程序,该 API 需要我通过基本身份验证(标头中的 base64)提供的身份验证。密码存储在代码中,现在必须停止,因为我想交出代码。
当用户因密码计划更改密码时,应用程序应提示用户输入新的 Jira 密码,安全保存,并通过基本身份验证将其传递给 Jira API。
最好的方法是什么?
通常情况下,我们会对其进行散列,但这是不可能的,因为散列是单向的,我们需要将真实密码传递给 Jira,而不是散列。
如果存储需要保护的字符串以防泄露或作为一般软件数据安全问题,则应进行加密。例如,在您的情况下,当用户获取密码时,应在存储前由软件对其进行加密。检索时,密码被解密并转换为 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.