我试图制作优惠券验证表单,使用加密方式隐藏用户的优惠券。
<input name="coupon-code" id="coupon-code" type="text" value="fedora">
这是验证功能:
//validated dynamically
$("#coupon-code").on('keyup', function () {
//stringified hash
coupons = ["3DA8FF923121DE176A1AB9FA3609A2AEAC25623628C8EB9E2C3D0D7364131648DE8E3F86259720EDC2C761F440AEB45225945765E05D21532B413834316EDBDB" ];
//after hashing the value of the input, convert it to a string
hash = CryptoJS.SHA512($(this).val()).toString(CryptoJS.enc.base64);
//loop and compare
for (i = 0; i < coupons.length; i++) {
if (hash == i) {
$('#coupon-code').css("background-color", "green");
} else {
$('#coupon-code').css("background-color", "red");
}
}
});
我保持&#34;真实&#34;优惠券而不是阵列中的哈希值用于演示目的。
第一个问题是我无法让crypto
将输入与数组中的元素进行比较:
CryptoJS.SHA512($("#coupon-code").val()) == CryptoJS.SHA512("fedora");
false
另一个问题是用户可以看到加密算法(在这种情况下为SHA 512)并且可以反向散列数组中的优惠券。 Crypto.js
没有问过/提供了一个密钥,所以我想这很容易。