C# 我的加密示例安全吗?

C# 我的加密示例安全吗?,c#,security,encryption,C#,Security,Encryption,不久前,我正在开发一种加密技术,以了解更多关于计算机安全的知识。嗯,这是大约8个月前的事了,我再也没有回去过。这已经改变了!我正在为我的works内部网编写一个小型asp.net网站,其中需要一个登录系统,因此我想对密码进行加密并将其存储在数据库中 所以,我会用例子让你看一下我刚才做的笔记,我想知道我是否能得到一些反馈/我所做的基本上是没有意义的/非常不安全(不包括我正在让你了解它的工作原理的事实…) 继续 我要做的第一件事是将输入的字符串分解为每个字符的值,因此,例如,如果用户有密码“Hell

不久前,我正在开发一种加密技术,以了解更多关于计算机安全的知识。嗯,这是大约8个月前的事了,我再也没有回去过。这已经改变了!我正在为我的works内部网编写一个小型asp.net网站,其中需要一个登录系统,因此我想对密码进行加密并将其存储在数据库中

所以,我会用例子让你看一下我刚才做的笔记,我想知道我是否能得到一些反馈/我所做的基本上是没有意义的/非常不安全(不包括我正在让你了解它的工作原理的事实…)

继续

我要做的第一件事是将输入的字符串分解为每个字符的值,因此,例如,如果用户有密码“Hello”,它将被分解如下

"H" = 104,
"E" = 101,
"L" = 108,
"L" = 108,
"O" = 111
下一步我要做的是生成一个随机数,假设在50到100之间,让事情简单一些,然后我从这个伪随机数中找到第n个素数,所以如果生成的数字是70,那么它将给出
349

接下来我要做的就是将转换后的输入字符串中的所有十进制数相加

104+101+108+108+111=532

然后我将给定的数字乘以找到的第n个素数,因此
532*349
给我
185668


然后,该数字与散列(或您称之为第n个素数的任何名称)一起存储在数据库的另一列中。

这是安全的吗?否。这是否保护用户的密码?没有

它很容易受到基本密码分析的攻击。例如,通过简单的SQL注入,攻击者可以同时获得“哈希”和素数

从那里,攻击者可以简单地将散列除以素数,得到字符的总和

有趣的是,虽然原始密码受到保护,但冲突却没有。因此,攻击者可以生成一个微不足道的冲突并使用它登录到您的站点

例如,假设除以“hash”之后是532。我们可以通过7个字符的重复字符(
“>>>>>>>>>>>>>”
)得到相同的哈希值

好的散列函数有3个基本属性:

  • 成像前电阻(给定
    h(m)
    应该很难找到
    m
  • 第二个图像前电阻(给定
    m
    应该很难找到
    n
    ,从而
    h(m)==h(n)
  • 抗碰撞性(应该很难找到一对消息,
    h(m)=h(n)
  • 你给定的函数只可能做第一个,但这只是因为有太多可能的排列(碰撞),所以不可能知道原来的是什么

    所以绝对不是


    我建议使用经批准和审查的加密技术,并考虑。

    “我正在开发一种小加密技术[…]它安全吗?”-你是安全专家吗?那么不。为什么不只是散列和使用salt?它很容易实现,而且更难破解。另外:这种加密技术是如何实现的?据我所知,它是不可逆的(因为无法区分
    HELLO
    HLELO
    等)…@JohnathanBrown让我思考-这难道不意味着如果我的密码是
    HELLO
    ,我也可以用
    HLELO
    登录吗?一旦你有了第n个素数,你的密码就很容易破解,不是一个好的算法,想法很好,只要试着跳出框框思考就行了