我的用户在数据库中保存了密码字段,例如"0!ZWQ2".我必须将用户输入密码从"aA1234"解读为"0!ZWQ2"并将其与数据库中的数据进行比较.
我比较的2个字符串是:
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890""9setybcpqwiuvxr108daj5'-`〜!@#$%^&*()_ + |}] [{:.?/ <>,; ZWQ2 @#34KDA"
这样a = 9和0 = A.
我怎么会用C#做这个,有什么想法吗?
我只需要从用户输入中获取密码字段并将其加密为有趣的文本,以将其与数据库中的数据进行比较.
任何帮助将不胜感激.
问候艾蒂安
更新:(2009年2月10日)感谢大家的回复.请注意,我确实意识到有更好的方式来处理这个问题.但请注意,我正在创建一个ASP.NET应用程序,它坐在SharePoint内部连接到Cobol平面文件数据而不是正确的数据库.使用Transoft将我的ASP.NET(ODBC连接器)连接到Cobol平面文件.所以我必须坚持使用这个代码,这不会在我的私人网站上使用.我也无法控制何时在Cobol中创建密码.
有什么特殊原因不使用标准的hash + salt来存储密码,而不是使用Caesars密码?
应该解决的一种方法(未经测试的代码):
new string("aA1234".ToCharArray().Select(c => ScrambleChars[OriginalChars.IndexOf(c)]).ToArray());
以下是转换的快速,快速和较少的代码示例.
C#中的代码:
char[] OriginalChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray(); char[] ScrambleChars = "9setybcpqwiuvxr108daj5'-`~!@#$%^&()+|}][{:.?/<>,;ZWQ2@#34KDART".ToCharArray(); string TextToTransfer = "Hello"; string NewText = ""; foreach (char c in TextToTransfer) { NewText = NewText + ScrambleChars[Array.IndexOf(OriginalChars, c)].ToString(); } Console.WriteLine(NewText);
VB中的代码:
Dim OriginalChars() As Char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" Dim ScrambleChars() As Char = "9setybcpqwiuvxr108daj5'-`~!@#$%^&()+|}][{:.?/<>,;ZWQ2@#34KDART" Dim TextToTransfer As String = "Hello" Dim NewText As String = "" For Each c As Char In TextToTransfer NewText += ScrambleChars(Array.IndexOf(OriginalChars, c)) Next MsgBox(NewText)