C# 我正在制作我的第一个加密程序,有什么提示吗?

C# 我正在制作我的第一个加密程序,有什么提示吗?,c#,encryption,cryptography,C#,Encryption,Cryptography,我正在用C语言编写一个程序,里面有密码,我需要对它们进行加密。到目前为止,我将字符串向后翻转(因此hello变为olleh),然后使用循环遍历每个字符,其中的循环遍历另一个包含转换字母的字符串,以查看它们是否匹配。使用这个函数,hello=Ghh#$,因此它工作正常。不管怎样,我还有什么可以补充的吗?PS什么是盐析,如何单向散列?密码学的规则之一是不要编写自己的加密方案。相反,使用一个库,例如具有C#绑定的库 有关更多信息,请查看以下问题的第一个答案: 首先,加密和散列的区别在于,在较高的层次上

我正在用C语言编写一个程序,里面有密码,我需要对它们进行加密。到目前为止,我将字符串向后翻转(因此hello变为olleh),然后使用循环遍历每个字符,其中的循环遍历另一个包含转换字母的字符串,以查看它们是否匹配。使用这个函数,hello=Ghh#$,因此它工作正常。不管怎样,我还有什么可以补充的吗?PS什么是盐析,如何单向散列?

密码学的规则之一是不要编写自己的加密方案。相反,使用一个库,例如具有C#绑定的库

有关更多信息,请查看以下问题的第一个答案:

首先,加密和散列的区别在于,在较高的层次上,加密数据可以用正确的密钥解密,而散列数据只能通过预生成或彩虹表等蛮力方法检索

哈希密码的验证方法是,每次用户登录时,以创建帐户时的相同方式对其输入进行哈希,然后比较哈希结果。对于任何给定的输入,哈希结果应该是相同的

强制性咆哮:

有一个很好的论点是,密码应该始终使用加密性强的算法进行散列。你可能会听到这样的借口:“我的应用程序/网页/等等并不那么重要,那里没有敏感信息”,或者“我只是在学习,所以它并不重要”,但事实是,如果我能破解一个网站的安全,或者你让你的机器登录,我从你的“教育”应用程序中窃取你的密码文件,我可以获取用户的所有电子邮件地址,并几乎保证其中至少有几个会使用相同的密码登录gmail或yahoo帐户。然后,我可以发送任何网站的重置请求,他们的电子邮件告诉我他们有一个帐户,也可以访问这些网站因此,无论您编写的是什么软件,如果它存储密码,您都应该做一些负责任的事情,并正确地对其进行salt+散列

salt:) 散列:

简单的例子:

var salt = "abc123";
var encryptedPassword = HashingAlgorithm("password");
var encryptedSaltedPassword = HashingAlgorithm ("password" + salt);

Console.Writeline(encryptedPassword);
Console.Writeline(encryptedSaltedPassword);
写出

aIdekXieklKq309nasdf

dfk#cxk)8lkdfesijcde

添加代码的目的是防止字典攻击。如果有人知道了你的哈希算法,他们可以用蛮力遍历字典中的每个单词,找出“password”哈希为“aidekxieklk309nasdf”。如果你想把你的salt字加密,他们也必须知道你的salt字


此外,最好将密码散列到数据库中,而不是使用某种双向算法,这样任何有权访问数据库的人(包括您和您的同事)都可以查看并查看您的用户使用的密码(因为许多用户倾向于在多个站点上重复使用相同的密码).

第一条加密规则-不要发明自己的算法这是为了学习经验还是实际使用?至于salt和hash,只要在谷歌上搜索一下就可以了。它们只是为了教育,所以我自己写。我不能回答你所有的问题,但我可以说salt是用来防止彩虹表攻击的。第一条加密规则——不要接受互联网上陌生人(包括我自己)关于加密的建议。记住,我们并非都是好心人,兔子和独角兽善良的陌生人:-)+1我正要链接到同一篇“经验教训”文章。“添加代码的目的是防止字典攻击”——这不完全正确。盐析防止使用预先计算的散列。预计算的来源可以是一个字典,也可以是一个蛮力一般情况下,salt应该是特定于用户的,比如与密码关联的用户名,而不是常量。