恋_紫花地丁吧 关注:20贴子:374
  • 13回复贴,共1

【密码专题】用计算机解密码~~(原创)

只看楼主收藏回复



IP属地:江苏1楼2010-10-31 18:13回复
    本人是个密码爱好者又是狂热的计算机爱好者,故合二为一写下了这篇文章,这里列举的密码以及代码都是很简单的,假如你有兴趣可以举一反三,写出更多密码的算法代码(手打)
        密码由来已久,传说古希腊战争中就反复运用密码来传递重要的情报,而在之后的两次世界大战中更加经常见到它的使用。在远离世界大战阴影的今天,密码也不曾远离人们的视线,就拿红客们最熟悉的MD5来说,经常可以在注入搜索password内容时发现密码使用了MD5加密手段进行保护,其中MD5就是一种加密算法。
        破解密码是很困难的,以一个凯撒密码为例,它的原理是将明文字符按字母表的顺序顺次移位,以abc为例,假如顺次移动3位那加密后的密文就是"def"(此时我们把顺次移动的“3”称之为密钥),由于真实破解密码时我们不可能知道密钥,因此我们需要对每种密钥的情况进行破解,那就需要试26-1=25次,想想每一次都需要对字符串进行移位,假如是比较长的字符串,那纯手算计算量就相当的可观,另外一些安全性很好的加密算法的话,破解需要尝试的次数可能要成百上千次,那手工破解密码肯定是不行的,于是计算机进行破解密码的方法应运而生,以一个每秒可以运算10亿次的计算机来说,对于手工计算需要很长时间的密码,说不定它只要几分钟就可以破解完毕,下面就是利用计算机来破解密码的范例。


    IP属地:江苏2楼2010-10-31 20:16
    回复
      凯撒密码:
      c语言:
      #include <stdio.h>
      main()
      {
      char M[100];
      char C[100];
      char A[100];
      int i,K=14;  
      printf("输入明文:");
      gets(M);
      for(i=0;M[i]!='\0';i++)
          C[i]=(M[i]-'a'+K)%26+'a';
      C[i]='\0';
      printf("加密后:%s\n",C);
      for(i=0;C[i]!='\0';i++)
          A[i]=(C[i]-'a'-K+26)%26+'a';
      A[i]='\0';
      printf("解密后:%s\n",A);
      }
      vb:
      Private Function kaisa(ByVal s As String, ByVal a As Integer) As String
      Dim MiYue As String, MingWen As String, MiWen As String
      MingWen = s
      If IsNumeric(a) = False Then
      MsgBox "提示:密钥必须为1到26的数字", , "出错了"
      End If
      MiYue = Val(a)
      MiWen = ""
      For i = 1 To Len(MingWen)
      If Asc(Mid(MingWen, i, 1)) < 65 Then j = Asc(Mid(MingWen, i, 1))
      If Asc(Mid(MingWen, i, 1)) > 90 And Asc(Mid(MingWen, i, 1)) < 97 Then j = Asc(Mid(MingWen, i, 1))
      If Asc(Mid(MingWen, i, 1)) > 122 Then j = Asc(Mid(MingWen, i, 1))
      If (Asc(Mid(MingWen, i, 1)) >= 65 And Asc(Mid(MingWen, i, 1)) <= 90) Or (Asc(Mid(MingWen, i, 1)) >= 97 And Asc(Mid(MingWen, i, 1)) <= 122) Then
      If MiYue > 0 Then
      j = Asc(Mid(MingWen, i, 1)) + MiYue
      If j > 90 And j < 97 Then j = j - 26
      If j > 122 Then j = j - 26
      End If
      If MiYue < 0 Then
      j = Asc(Mid(MingWen, i, 1)) + MiYue
      If j < 97 Then j = j + 26
      End If
          If MiYue = 0 Then
      j = Asc(Mid(MingWen, i, 1))
      End If
      End If
      MiWen = MiWen + Chr(j)
      Next
      kaisa = MiWen
      End Function    '这里用了分治的思想,把输入的字符按ascll分类,函数中形参s为明文,a为移位的密钥


      IP属地:江苏3楼2010-10-31 20:16
      回复
        替代密码:
        密码中有着大量的替代密码存在,所谓的替代密码就是明文中的大多数元素都可以通过替代表中的转换为相应的字符,例如用1替换A,2替换B,3替换C。。。以此类推,这样BAIDU这个明文加密后就变成了2 1 9 4 21。。。。。
        替代密码有很多,破解的关键就是找到相应的替代表,一一对应即可破解。。。
        众所周知的摩尔斯电码亦可属此种密码之列,因此可以用摩尔斯的替换规则作演示,其它替换密码只要从此基础上做相应的改变即可
        vb:
        Dim Str As String
              Open "c:\Caption.txt" For Input As #1
                  Line Input #1, Str
        Line Input #1, s2
              Close #1
        Dim a    As String
        Dim j    As String
        b = Split(Str, " ", 26)
        c = Split(s2, " ", 10)
        a = Text2.Text'    text2中输入明文,密文在text1中输出
        For i = 0 To 9
        a = Replace(a, i, c(i) & "/ ")
        Next i
        For i = 0 To 25
        j = Replace(a, Chr(65 + i), b(i) & "/ ")
        a = Replace(j, Chr(97 + i), b(i) & "/ ")
        Next i
        a = Replace(a, "0", "*")
        a = Replace(a, "1", "-")
        Text1.Text = a'在c盘根目录下新建Caption.txt,里面用0替代摩尔斯的“滴”用1替代摩尔斯的“搭--”
        附:Caption.txt内容
        01 1000 1010 100 0 0010 110 0000 00 0111 101 0100 11 10 111 0110 1101 010 000 1 001 0001 011 1001 1011 1100
        11111 01111 00111 00011 00001 00000 10000 11000 11100 11110


        IP属地:江苏4楼2010-10-31 20:16
        回复
          倒序:这种加密方法非常简单,就是将明文字符串中所有字符倒一下就能得到密文,看似简单,但假如把明文“baidu”用这方法加密的话“udiab”,很难一眼认出来明文是什么。。。
          vb:
          程序很简单
          miwen = StrReverse(mingwen)'miwen和mingwen是两个字符串函数
          c语言的话只要用for循环将一个数组的元素倒着存入另一个数组就可以,不过需要注意地方的就是字符串数组结尾的/0
          


          IP属地:江苏5楼2010-10-31 20:16
          回复
            ok ,就写到这里吧,要我这个懒人写这么多不容易,另外我破解入门的第二篇即将出炉,在此打个广告,希望各位多多捧场。。。
            ps.还有两段内容和代码被度娘说是广告。。。不让发。。
            ========================end=====================


            IP属地:江苏6楼2010-10-31 20:17
            回复
              为什么是c和vb..


              IP属地:美国来自Android客户端7楼2014-05-05 12:10
              收起回复
                前排围观初中就可以完爆众人的地丁


                来自Android客户端8楼2014-05-06 10:59
                收起回复


                  IP属地:江苏来自Android客户端9楼2014-09-25 15:30
                  回复
                    吓尿了


                    IP属地:江苏来自Android客户端10楼2014-09-25 15:30
                    回复
                      咦才发现..................


                      IP属地:美国来自Android客户端11楼2014-10-19 12:34
                      回复