从int到短字符串的双向加密

时间:2009-05-20 12:15:36

标签: c# .net asp.net cryptography passwords

我正在构建一个小型的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发送给我的代码”,但如果有人已经做过这样的事情,请随时分享。

提前感谢任何信息。

4 个答案:

答案 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,我建议您查看以下命名空间。

System.Security.Cryptography