Tag: 信用卡

使用luhn算法validation信用卡号

我对以下编程任务有疑问。 信用卡号码遵循某些模式。 信用卡的长度必须介于13到16位之间。 它必须从: •4张Visa卡 •5张万事达卡 •美国运通卡37张 1954年,IBM的Hans Luhn提出了一种validation信用卡号的算法。 该算法可用于确定是否正确输入了卡号或扫描仪是否正确扫描了信用卡。 几乎所有信用卡号都是在此有效性检查后生成的,通常称为Luhn检查或模数10检查,可以描述如下。 例如,请考虑卡号4388576018402625。 从右到左加倍每秒。 如果数字加倍会产生2位数字,请将两位数相加以得到一位数字。 2 x 2 = 4 2 x 2 = 4 4 x 2 = 8 1 x 2 = 2 6 x 2 = 12(1 + 2 = 3) 5 x 2 = 10(1 + 0 = 1) 8 x 2 […]

IDTECH信用卡读卡器数据解密

我正在尝试解密IDTECH信用卡读卡器的加密数据。 此详细信息已使用DU DES使用带有CBC密码的Triple DES加密。 加密刷卡(来自IDTECH信用卡读卡器): 028801001F372300%*5150********7903^PAYPASS/MASTERCARD^************ ***?*;5150********7903=***************?*8871B640F379F3BD8D057A13F81454 39B28D80BE8A43F3440D85928F576065EEE1BA54CAADFF67D552C2B0CBF1A9F 34B63402B967998FC7C80487C8A6DBFD46975985D3D7E865FEEF6A48930751DC9 71FDFCBC1989294B7EF6F0D0007AA731C31F574608EB85E57751DA48970F96B0E 8BECDB94D672D746C2CC75176FA6E0C9E6FEFE0B154A0959B6299490125000000 00197F6903 解密的可用细节:: Key Value: F5 BF 6B E8 55 AB 92 3A DE 7E 77 40 D8 46 F9 DE KSN: 62 99 49 01 25 00 00 00 00 1A 解密数据(结果):ASCII格式的数据 %B5150710200107903^PAYPASS/MASTERCARD^090910140000631??;5150710200 107903=090910140000631?0 任何安全算法或JAVA专家都可以指导我如何继续解密这些数据。 我在寻找java的解决方案。 以上信息是否足以解密数据或需要更多信息?

使用Luhn算法检查信用卡有效性

我尝试使用Luhn算法检查信用卡的validation,该算法的工作方式如下: 从右到左加倍每秒。 如果数字加倍会产生两位数字,请将两位数相加得到一位数字。 2 * 2 = 4 2 * 2 = 4 4 * 2 = 8 1 * 2 = 2 6 * 2 = 12(1 + 2 = 3) 5 * 2 = 10(1 + 0 = 1) 8 * 2 = 16(1 + 6 = 7) 4 * 2 = 8 […]

如何使用Log4J屏蔽日志文件中的信用卡号?

我们的网络应用程序需要符合PCI标准,即不得存储任何信用卡号码。 该应用程序是一个大型机系统的前端,它在内部处理CC号码 – 正如我们刚刚发现的那样 – 偶尔会在其一个响应屏幕上吐出一个完整的CC号码。 默认情况下,这些响应的全部内容都以调试级别记录,并且从这些响应中解析的内容也可以记录在许多不同的位置。 所以我无法追捕这些数据泄漏的来源。 我必须确保在我们的日志文件中屏蔽了CC编号。 正则表达式部分不是问题,我将重用我们已在其他几个地方使用的正则表达式。 但是我找不到有关如何使用Log4J更改日志消息的一部分的任何好的来源。 filter似乎更受限制,只能决定是否记录特定事件,但不能改变消息的内容。 我还发现了Log4J的ESAPI安全包装API ,它初看起来有望实现我的目标。 但是,显然我需要用ESAPI记录器类替换代码中的所有记录器 – 这是一个痛苦的屁股。 我更喜欢更透明的解决方案。 知道如何屏蔽Log4J输出的信用卡号码吗? 更新:根据@ pgras的最初想法,这是一个有效的解决方案: public class CardNumberFilteringLayout extends PatternLayout { private static final String MASK = “$1++++++++++++”; private static final Pattern PATTERN = Pattern.compile(“([0-9]{4})([0-9]{9,15})”); @Override public String format(LoggingEvent event) { if (event.getMessage() instanceof String) { String message = […]