mvc - 隐藏信用卡或借记卡中的号码

时间:2018-03-26 15:23:34

标签: asp.net-mvc entity-framework

问题是以下我有一个字段,我输入卡号,存储纠正,当我显示数据时发生以下情况显示卡的完整编号,出于安全原因应该出现如此

************ 1234

所以我想知道如何展示文字,以便能够为网站提供更多安全性,帮助

1 个答案:

答案 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)如果要检查先前是否输入过卡号,请勾选新的卡号,然后将该哈希值与数据库中的数字进行比较。如果哈希值相等且后四位数相等,则表示匹配。