我正在使用crypto.signText()
和CAPICOM
签署一些文字。
所以,现在我正在使用Base64Encoded签名文本。
然后我使用BouncyCastle来验证签名。直到这没关系。
现在我想做的是,
当用户第一次登录系统时我想验证该签名然后将publicKey存储到数据库中。从下次登录开始,我想将使用新签名的文本与该用户的数据库中的publicKey进行匹配。
如果签名文本中的公钥和存储在db中的公钥相同,则只允许用户登录系统。
如何实现这个? (我正在使用JAVA郎)
答案 0 :(得分:0)
首先使用私钥创建签名,而不是公钥。之后,可以使用公钥验证签名。这是您可以做的,使用数据库中的公钥并验证“签名文本”的签名。在Java中,您通常不再需要Bouncycastle。运行时已包含您需要的所有内容。
如何验证签名的示例: http://download.oracle.com/javase/tutorial/security/apisign/vstep4.html
为避免重播攻击,“签名文本”应包含系统时间和日期或单调计数器。因此,还应检查文本的内容是否为最新。