问题是以下我有一个字段,我输入卡号,存储纠正,当我显示数据时发生以下情况显示卡的完整编号,出于安全原因应该出现如此
************ 1234
所以我想知道如何展示文字,以便能够为网站提供更多安全性,帮助
答案 0 :(得分:2)
我将对如何继续进行高级概述。您需要做出一些指导性的决定,并且可能需要做一些谷歌搜索以填写详细信息。
首先,为什么要存储哈希而不是全数?这应该是显而易见的,但如果您的数据库受到损害会发生什么?黑客现在拥有您的所有客户卡号。这是非常糟糕。所以我们尽可能存储哈希。如果你绝对必须存储完整的号码,你可以这样做,但你需要一个坚实的理由。
1)选择哈希 - SHA-1对我们的目的有利。对于您的课程作业,几乎任何散列函数都可以;但是,对于企业来说,you will want to be PCI-compliant, meaning your hashing function should be cryptographic and salted。这超出了你的问题的范围。我建议你选择SHA-1。
2)修改数据库表,使其有两列卡号信息:十六进制格式的SHA-1哈希长度为40个字符。最后四个是四个字符长。因此,您需要两列,分别为40和4个字符。
3)将卡存储到数据库中时,将其哈希,并在存储之前获取最后四位数字。
public static string SHA1HashStringForUTF8String(string s)
{
byte[] bytes = Encoding.UTF8.GetBytes(s);
var sha1 = SHA1.Create();
byte[] hashBytes = sha1.ComputeHash(bytes);
return HexStringFromBytes(hashBytes);
}
public static string HexStringFromBytes(byte[] bytes)
{
var sb = new StringBuilder();
foreach (byte b in bytes)
{
var hex = b.ToString("x2");
sb.Append(hex);
}
return sb.ToString();
}
5)显示编辑后的卡号时,只显示一串星号,后跟最后四位数字。
6)如果要检查先前是否输入过卡号,请勾选新的卡号,然后将该哈希值与数据库中的数字进行比较。如果哈希值相等且后四位数相等,则表示匹配。