代码之家  ›  专栏  ›  技术社区  ›  Thomas Stock

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

  •  1
  • Thomas Stock  · 技术社区  · 17 年前

    我们计划加密他们的customerId并将其提供给客户,以便他可以在webapp上输入该密钥,从而允许我们将密钥解密到他的ID中。

    这是一个空模板:

    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 回复  |  直到 17 年前
        1
  •  8
  •   Mehrdad Afshari    17 年前

    不要将您的密码基于用户ID。相反,为每个客户生成一个随机的6个字符的字符串,并将其存储在数据库中。它不容易找到实际的算法。

        2
  •  4
  •   Martin Peck    6 年前

    您的意思是,您将获取一些内部客户ID并将其转换为其他ID(在您的情况下,是内部客户ID的加密版本)。为什么不创建两个密钥呢?一个是内部客户ID(保存在数据库中并用作主键的密钥)和一个外部客户ID(另一个8位数的唯一密钥,用作备用密钥)。您将这两者存储在数据库中,当它们“登录”时,您将根据后面的内容进行查找。

    我想和你一样:什么能阻止别人猜你的6位或8位钥匙。不管它们是由一些随机字符组成的加密ID,只要有6或8位数字,就不会有人对您的站点发起攻击并猜测某人的密钥。您将这些密钥格式化为6或8位数字,这一事实使攻击者的工作更容易。

        3
  •  1
  •   Noldorin    17 年前

    我不太清楚你在这里的意图。你不能简单地生成一个 UUID 或者类似的东西,并将其(或其一部分)用作用户的代码?您只需将其与数据库中的用户ID一起存储即可。

        4
  •  0
  •   Shaun Mason    17 年前

    我同意另一张海报的说法,他说不要将加密字符串建立在数据库中的某些内容上。生成要存储在数据库中的唯一随机字符串要容易得多。

    但是,如果必须使用用户ID,我建议查看以下名称空间。

    System.Security.Cryptography