C# 加密/解密数字的简单方法
我需要用一种简单的方法加密一个2位数的数字。我在谷歌找到的样本似乎相当复杂。有什么简单的方法可以做到这一点吗 更新C# 加密/解密数字的简单方法,c#,asp.net-mvc,C#,Asp.net Mvc,我需要用一种简单的方法加密一个2位数的数字。我在谷歌找到的样本似乎相当复杂。有什么简单的方法可以做到这一点吗 更新 我正在为我的ASP.NET MVC应用程序编写自定义数字验证码。我已经创建了一个自定义html帮助程序,它将使用captcha图像的base-64编码字符串呈现图像标记。验证码图像类似于23+12=?。当用户提交答案时,我想验证它,对吗?我对在会话中存储总和不感兴趣,所以我想对总和进行加密并附加为隐藏字段,这样当用户提交表单时,我就可以轻松地进行验证。如果您的号码是x,那么您可以将
我正在为我的ASP.NET MVC应用程序编写自定义数字验证码。我已经创建了一个自定义html帮助程序,它将使用captcha图像的base-64编码字符串呈现图像标记。验证码图像类似于
23+12=?
。当用户提交答案时,我想验证它,对吗?我对在会话中存储总和不感兴趣,所以我想对总和进行加密并附加为隐藏字段,这样当用户提交表单时,我就可以轻松地进行验证。如果您的号码是x
,那么您可以将其加密为(x+密钥)mod 100
。这将产生另一个2位数字,y
没有比这更简单的了
解密只需x=y-key
,+100
(如有必要)
如果键
为2:
x = 15
y = 15 + 2 = 17
x = 17 - 2 = 15
x = 99
y = 99 + 2 mod 100 = 101 mod 100 = 1
x = 1 - 2 + 100 = 99;
更简单的方法是将x
加密为x
。他们绝对不会想到
编辑1:
更严肃地说,如果这不是某种个人实验/家庭作业,我会远离这些“简单”的算法,而选择System.Security.Cryptography和那些不太复杂的Google或charles sun的示例。除非你用它做了一个载体,否则你永远不会实现你自己的加密/解密算法,那样做是疯狂的
编辑2:
那么您想将验证码和正确的响应发送给客户端?我不认为这是怎么做到的(但这又不是我的领域…)。我一直认为验证是在服务器端完成的(您控制并保持安全的部分)
为了安全起见,我会用很难的方法加密所有东西。如果你的号码是
x
,那么你可以将其加密为(x+密钥)mod 100
。这将产生另一个2位数字,y
没有比这更简单的了
解密只需x=y-key
,+100
(如有必要)
如果键
为2:
x = 15
y = 15 + 2 = 17
x = 17 - 2 = 15
x = 99
y = 99 + 2 mod 100 = 101 mod 100 = 1
x = 1 - 2 + 100 = 99;
更简单的方法是将x
加密为x
。他们绝对不会想到
编辑1:
更严肃地说,如果这不是某种个人实验/家庭作业,我会远离这些“简单”的算法,而选择System.Security.Cryptography和那些不太复杂的Google或charles sun的示例。除非你用它做了一个载体,否则你永远不会实现你自己的加密/解密算法,那样做是疯狂的
编辑2:
那么您想将验证码和正确的响应发送给客户端?我不认为这是怎么做到的(但这又不是我的领域…)。我一直认为验证是在服务器端完成的(您控制并保持安全的部分)
为了安全起见,我会用很难的方法加密所有内容。这可能不太严重,但它确实有效
static IEnumerable<string> GetRandomStringsForever()
{
var rng = new Random(); // or maybe new Random(14142848)
while (true)
{
char[] arr = new char[8];
for (int idx = 0; idx < arr.Length; ++idx)
arr[idx] = (char)rng.Next('A', 'Z' + 1);
yield return new string(arr);
}
}
static void Main()
{
var secretKey = GetRandomStringsForever().Distinct().Take(100).ToList();
int message = 42;
// encrypt:
string cryptic = secretKey[message];
Console.WriteLine("Who can guess the number from this: " + cryptic);
// decrypt:
int reconstructed = secretKey.IndexOf(cryptic);
Console.WriteLine("The message was: " + reconstructed);
}
静态IEnumerable GetRandomStringsForver()
{
var rng=new Random();//或者可能是new Random(14142848)
while(true)
{
char[]arr=新字符[8];
对于(int-idx=0;idx
好吧,如果人们知道你在用我的想法做这件事,他们可能会自己构造
secretKey
(使用与你相同版本的.NET),所以这不是很安全。这可能不是很严重,但它是有效的
static IEnumerable<string> GetRandomStringsForever()
{
var rng = new Random(); // or maybe new Random(14142848)
while (true)
{
char[] arr = new char[8];
for (int idx = 0; idx < arr.Length; ++idx)
arr[idx] = (char)rng.Next('A', 'Z' + 1);
yield return new string(arr);
}
}
static void Main()
{
var secretKey = GetRandomStringsForever().Distinct().Take(100).ToList();
int message = 42;
// encrypt:
string cryptic = secretKey[message];
Console.WriteLine("Who can guess the number from this: " + cryptic);
// decrypt:
int reconstructed = secretKey.IndexOf(cryptic);
Console.WriteLine("The message was: " + reconstructed);
}
静态IEnumerable GetRandomStringsForver()
{
var rng=new Random();//或者可能是new Random(14142848)
while(true)
{
char[]arr=新字符[8];
对于(int-idx=0;idx
好吧,如果人们知道你在用我的想法来做这件事,他们可能会自己构造
secretKey
(使用与你相同版本的.NET),所以这不是很安全。你看过System.Security.Cryptography了吗?n+=1。他们永远也看不到它的到来。@fire.eagle:那么99呢?你为什么要加密一个两位数的数字?那似乎没什么意义。还有其他要求吗?看起来太简单了…你看过系统安全加密吗?n+=1。他们永远也看不到它的到来。@fire.eagle:那么99呢?你为什么要加密一个两位数的数字?那似乎没什么意义。还有其他要求吗?这似乎太简单了。。。