如何安全存储各种凭证?

时间:2018-03-21 20:50:10

标签: postgresql security passwords credentials

背景:我正在开发一个应用程序(用于学校项目),它本质上将成为网络资产管理和修复工具。它将扫描网络中的设备,收集有关它们的信息,并做一些与问题无关的其他事情。它的一个功能是允许用户为各种网络设备提供登录凭据,以便应用程序可以登录到这些设备,以便它可以收集更多信息,稍后,允许进行更改。

我的问题:我如何安全地存储这些提供的凭据。目前后端将包含一个PostgreSQL数据库(它将包含扫描数据),但我不确定将它们存储在那里是否安全,或者我应该如何安全地存储它们以便它们可能是稍后使用。

P.S。:如果您需要任何其他信息,请告诉我,我是新手使用堆栈溢出,所以我不确定我是否提供了足够的详细信息。谢谢。

1 个答案:

答案 0 :(得分:0)

https://www.postgresql.org/docs/current/static/pgcrypto.html docs是非常具体的例子。每个db创建一次扩展:

t=# create extension pgcrypto;
CREATE EXTENSION

假设密码为Ирландия,然后使用随机盐:

t=# select crypt('Ирландия', gen_salt('md5'));
               crypt
------------------------------------
 $1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1
(1 row)

或:

t=# select crypt('Ирландия', gen_salt('md5'));
               crypt
------------------------------------
 $1$wjJDa4Np$M7XqQIrgnfpAf.CLtrpkv1
(1 row)

每次都有不同的结果,所以请选择其中任何一项来检查密码是否正确,例如:

t=# select crypt('Ирландия', '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1') = '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1' as match;
 match
-------
 t
(1 row)

和错误:

t=# select crypt('ИрландияNOT', '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1') = '$1$gMymr.0W$axxTHvfmsNRDkepNAMNsT1' as match;
 match
-------
 f
(1 row)

上述函数的参数在 F.26.2节中。密码哈希函数