我正在构建一个小型的Web应用程序,我们的客户可以在其中更新有关其公司的一些详细信息。客户目前没有登录名/密码,我们不想验证他们的注册,所以我们想给他们一个自动生成的密码/密钥来登录网站。
我们计划加密他们的customerId并将其交给客户,以便他可以在webapp上输入该密钥,以便我们将密钥解密为他的ID。
大约有1万名客户,他们并没有收到任何电子邮件,因此有些人会收到一封带有URL和代码的信件。这意味着客户必须输入代码,因此代码不能超过8个字符(最好是6个)。
这是一个空模板:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int passwordLength = 6;
int customerId = 12345;
string encrypted = Crypter.Encrypt(customerId, "secretKey", passwordLength);
if (customerId == Crypter.Decrypt(encrypted, "secretKey"))
{
Console.WriteLine("It worked! Well done!");
}
}
}
public static class Crypter
{
public static string Encrypt(int input, string key, int passwordLength)
{
string encryptedString = "";
//do encrypt stuffz here
return encryptedString;
}
public static int Decrypt(string encryoted, string key)
{
int decrypted = 0;
//do decrypt stuffz here
return decrypted;
}
}
}
=>任何人都可以链接到我有关如何执行此操作的更多信息吗?
我不是在寻找“PLZ发送给我的代码”,但如果有人已经做过这样的事情,请随时分享。
提前感谢任何信息。
答案 0 :(得分:8)
不要将您的密码基于用户ID。而是为每个客户生成一个随机的6个字符的字符串,并将其存储在数据库中。它不容易找到实际的算法。
答案 1 :(得分:4)
首先,我不确定你的想法是否非常好。但是,把它放在一边,我不确定你真的需要加密/解密任何东西。
您所说的是,您将获取一些内部客户ID并将其转换为其他ID(在您的情况下,以及内部客户ID的加密版本)。为什么不创建2个密钥 - 一个内部客户ID(您保存在数据库中并用作主键的ID)和外部客户ID(另一个8位唯一密钥,用作替代)。您可以将它们存储在数据库中,也可以在“登录”时根据后者进行查找。
我想你就是这样:什么阻止有人猜你的6或8位数键。无论它们是否只是一些随机字符集的加密ID,只有6或8位数字,不会花费很长时间让某人对您的网站进行攻击并猜测某些人的密钥。事实上,您要将这些密钥格式化为6位或8位数字,这使得攻击者的工作更加轻松。
我认为您最好发送这个8位数的密钥,让用户输入您已经知道的一些信息(他们的姓名,电子邮件地址,公司名称等),然后让他们定义用户ID /他们选择的登录。
答案 2 :(得分:1)
我不确定我是否完全明白你的意图。难道你不能简单地生成一个UUID或类似的东西并使用它(或它的一部分)作为用户的代码吗?您只需将其与数据库中的用户ID一起存储即可。
作为确保唯一性的替代方法,您可以基于两个单独的输入生成N-char代码。比如,8个字符中的5个可以随机生成,而其他3个字符将基于客户ID唯一生成。
答案 3 :(得分:0)
我同意另一张海报,他说不要将加密字符串基于数据库中的某些内容。生成唯一的随机字符串以存储在数据库中要容易得多。
但是,如果您必须使用用户ID,我建议您查看以下命名空间。