明文是一段2000字符的与信息安全相关的文章,加密人员通过自己的算法进行加密,加密后的密文和明文的字符数一样多。
加密人员犯了一个错误,那就是没有剔除空格和字符,我已经分析出了部分规律:
密文 所对应明文
小写 —— 大写
数字 —— 标点(包括空格)
大写 —— 小写
8 —— 空格
密文如下:
9WBEL9mYGUHMQ………………
CSDN帖子里不让放太长的字符,密文全文的下载地址如下:
http://sgzl.ys168.com/
非常谢谢
------解决方案--------------------
已经破解完成,包括加密密钥和算法。我写了一个用于解密的VBScript:
Decrypt.vbs
- VBScript code
Option Explicit Sub Decrypt(SecretFile, PlainFile) Const ForReading = 1, ForWriting = 2, ForAppending = 3 Dim fso, fSecret, fPlain, strInput, keys, strSecret, strPlain, lCount, strChar, ascChar Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FileExists(SecretFile) Then MsgBox "程序找不到密码文件,无法进行解密。", , "密码文件丢失" Exit Sub End If Set fSecret = fso.OpenTextFile(SecretFile, ForReading) Do If Not fso.FileExists(PlainFile) Then Exit Do strInput = InputBox("文件“" & PlainFile & "”已经存在,请重新指定明码文件名。", "文件重名") If strInput = "" Then Exit Sub PlainFile = strInput Loop Set fPlain = fso.CreateTextFile(PlainFile, True) keys = Array(2, 3, 1, 2, 1, 1, 2, 3, 2, 3, 2, 1, 2) strSecret = fSecret.ReadAll For lCount = 0 To Len(strSecret) - 1 strChar = Mid(strSecret, lCount + 1, 1) ascChar = Asc(strChar) If ascChar = 48 Then '0 strPlain = strPlain & Chr(10) ElseIf ascChar > 48 And ascChar < 52 Then '1-3 ascChar = ascChar - keys(lCount Mod 13) + 74 '42=-48+122 strPlain = strPlain & Chr(ascChar) ElseIf ascChar > 64 And ascChar < 91 Then 'A-Z ascChar = ascChar - keys(lCount Mod 13) strPlain = strPlain & LCase(Chr(ascChar)) ElseIf ascChar > 96 And ascChar < 123 Then 'a-z ascChar = ascChar + keys(lCount Mod 13) strPlain = strPlain & UCase(Chr(ascChar)) Else 'other strPlain = strPlain & " " End If Next fPlain.Write strPlain fPlain.Close fSecret.Close Set fPlain = Nothing Set fSecret = Nothing Set fso = Nothing MsgBox "解密完成,明码已保存在“" & PlainFile & "”文件中。", , "解密完成" End Sub Const SecretFileName = "SecretCode.txt", PlainFileName = "PlainCode.txt" Decrypt SecretFileName, PlainFileName