首页
社区
课程
招聘
[求助]初学密码学遇到的第一题是个vbs的题
发表于: 2010-10-9 10:45 4642

[求助]初学密码学遇到的第一题是个vbs的题

2010-10-9 10:45
4642
Function EnCode(key, scFileName,dtFileName) '加密函数

'需要补全的地方在这里

dtText.write step2

End Function

'----------------------------分割线---------------------

Function DeCode(key, scFileName,dtFileName) '解密函数

set fso = CreateObject("Scripting.FileSystemObject")

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If key < -95 or key > 95 Then                                '
        msgbox "参数非法"                                '
        Wscript.quit                                        '
End If                                                        '               
                                                        '
If fso.FileExists(scFileName) = False Then                '
        msgbox "文件" & scFileName & "不存在"                '
        Wscript.quit                                        '
End If                                                        '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
                                                                                                               
Set scText = fso.OpenTextFile(scFileName,1)
Set dtText = fso.CreateTextFile(dtFileName)
str = scText.readall

'''''''''''''''''''''''''''''''第一轮解密''''''''13''''        '
jiemi = Replace(str, "氍", """")                                      '
For I = 1 To Len(jiemi)                                        '
If Mid(jiemi, I, 1) <> "冱" Then                        '
        step1 = Mid(jiemi, I, 1) + step1                '
Else                                                        '               
                                                        '
        step1 = vbCrLf + step1                                '
End If                                                        '
Next                                                        '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''第二轮解密''''''''''''''移位''''''''''''''
For i = 1 To Len(step1)                                                        '
                                                                        '
        If ascw(mid(step1,i,1)) < 32 Or ascw(mid(step1,i,1)) > 126 Then        '
                step2 = step2 & chrw(ascw(mid(step1,i,1)))                '
        Else                                                                '
                pk = asc(mid(step1,i,1)) - key                                '
                If pk > 126 Then                                        '
                        pk = pk - 95                                        '
                ElseIf pk < 32 Then                                        '
                        pk = pk + 95                                        '
                End If                                                        '
                step2 = step2 & chr(pk)                                        '
        End If                                                                '
                                                                        '
Next                                                                        '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

dtText.write step2                                                                                                               
                                                                                               
End Function

EnCode 82, "Code.txt","enCode.txt"    '调用加密函数,对 Code.txt 进行加密,生成 enCode.txt 文件

DeCode 82, "enCode.txt","deCode.txt"  '调用解密函数,对 enCode.txt 进行解密,生成 deCode.txt 文件
以上题目解密程序的代码已给出,但由于我主要研究c语言,所以不太明白,求它的加密过程最好也用vbs解答并给予解释给新手们领一下路,当然用c的话也好。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
2
帮你转换一下吧, ascw/chrw应该是按Unicode或双字节的处理, 我简单的统一按char处理了.
#define MAX_STEP1 0x1000
#define MAX_STEP2 0x1000

int i, j, len;
char *str;
char step1[MAX_STEP1];
char step2[MAX_STEP2];
char pk;

// 第一轮解密
j = MAX_STEP1 - 1;
step1[j--] = '\0';
len = strlen(str);
for (i = 0; i < len; i ++)
{
	if (str[i] == "氍")  // 这个"氍"照抄你的原文
	{
		// jiemi = Replace(str, "氍", """"), 这句的意思是把所有的"氍"换成"", 把结果放进jiemi里, 我这里一步到位了
		step1[j--] = '"';
		step1[j--] = '"';
	}
	else if (str[i] == "冱")  // 这个"冱"照抄你的原文
	{
		step1[j--] = '\r';   // step1 = vbCrLf + step1
		step1[j--] = '\n';
	}
	else
	{
		step1[j--] = str[i]; // step1 = Mid(jiemi, I, 1) + step1
	}
}

// 第二轮解密
len = MAX_STEP1 - j;  // 计算step1的长度, 没时间推敲, 可能不准
j = 0;
for (i = 0; i < len; i ++)
{
	if ((step1[1] < 32) || (step1[1] > 126))
	{
		step2[j++] = step1[1];  // step2 = step2 & chrw(ascw(mid(step1,i,1)))
	}
	else
	{
		pk = step1[1] - key;  // pk = asc(mid(step1,i,1)) - key
		if (pk > 126)
		{
			pk -= 95;  // pk = pk - 95
		}
		else if (pk < 32)
		{
			pk += 95;  // pk = pk + 95
		}
		step2[j++] = pk;  // step2 = step2 & chr(pk)
	}
}
2010-10-13 23:58
0
游客
登录 | 注册 方可回帖
返回
//