| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 936 人关注过本帖, 1 人收藏
标题:获取磁盘序列号
只看楼主 加入收藏
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:8 
获取磁盘序列号
这是一位老大写的获取磁盘序列号的文件然后与用户输入的用户名进行运算,达到加密的目的,结果写到一个文件中,请大家看看,怎样再返回去得到用户名和序列号?对位的运算一窍不通呀

declare integer GetVolumeInformation in kernel32.dll;
    string,string@,integer,integer@,integer,integer,string@,integer
    *获取磁盘序列号
    if empty(thisform.text1.value)
        messagebox("请在下面添入用户名!",32,"系统提示")
        thisform.text1.setfocus
    else   
        newstr=""
        newname=""
        new=0
        serianum=0
        temp1=space(255)     &&设置字符传递缓冲区
        temp2=space(255)
        a=GetVolumeInformation("c:\",@temp1,len(temp1),@serianum,0,0,@temp2,len(temp2))
        CPKJ=serianum     &&取得序列号
        handle=fcreate("aa.RXI")
        new=bitxor(cpkj,123456789)
         nstr=alltrim(str(new))
         for m=1 to len(nstr) step 2
             newstr=newstr+chr(val(substr(nstr,m,2)))
         endfor
        b=fputs(handle,newstr)     &&将序列号加密保存到文件中
        thisname=alltrim(thisform.text1.value)
        for m=1 to len(thisname)
            onename=substr(thisname,m,1)
            newname=newname+chr(bitxor(asc(onename),49))
        endfor
        c=fputs(handle,newname)     &&将用户名加密保存到文件中
        
        =fclose(handle)
        messagebox('文件生成完毕!',64,"系统提示")
    endif
搜索更多相关主题的帖子: 一窍不通 用户名 序列号 加密 
2013-08-08 19:37
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:10 
2013-08-08 21:32
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9805
专家分:26913
注 册:2012-2-5
收藏
得分:0 
直接把用户名和序列号直接保存到内存变量文件中即可,没必要反推。

坚守VFP最后的阵地
2013-08-08 21:44
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
很好很强大,这个得到不是硬盘序列号,应该是卷序列号

在没有路的地方走一条路,让别人有路可走
2013-08-08 22:06
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9805
专家分:26913
注 册:2012-2-5
收藏
得分:10 
程序代码:
CLEAR
CSTR=FILETOSTR([AA.RXI])
ROWS=ALINES(A,CSTR,CHR(13)+CHR(10))
LOCAL B[2] && B[1]-序列号,B[2]-用户名
FOR I=1 TO 2
    B[I]=A[I]
ENDFOR
NEWSTR=[]
FOR I=1 TO LEN(B[1])
    NEWSTR=NEWSTR+TRANSFORM(ASC(SUBSTR(B[1],I,1)))
ENDFOR
序列号=BITXOR(INT(VAL(NEWSTR)),123456789)
NEWNAME=[]
FOR I=1 TO LEN(B[2])
    ONENAME=SUBSTR(B[2],I,1)
    NEWNAME=NEWNAME+CHR(BITXOR(ASC(ONENAME),49))
ENDFOR
用户名=NEWNAME
?序列号,用户名
也可以将加密与解密代码放在一起

坚守VFP最后的阵地
2013-08-08 23:05
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
老大就是老大,果然不一般

在没有路的地方走一条路,让别人有路可走
2013-08-08 23:53
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
这个简单了,加密程序就是其解密程序。按位异或运算,第一次是加密,再同样执行一次就是解密。
2013-08-08 23:57
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
运行一下试了试,行了,谢谢老大

[ 本帖最后由 scilent 于 2013-8-9 00:09 编辑 ]

在没有路的地方走一条路,让别人有路可走
2013-08-08 23:59
hankerasd
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-8-9
收藏
得分:0 
用GetVolumeInformation就可以了,我写了个简单代码
第一种:硬盘序列号,包含了厂商、型号、容量 读取该硬盘序列号需要用到BIOS中断,中断号好像是13,在Windows下无法使用,Win98可以。

第二种:卷序列号,即volumn number,可使用GetVolumeInfomation 获得

用GetVolumeInformation就可以了,我写了个简单代码

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 hankerasd 于 2013-8-9 12:24 编辑 ]
2013-08-09 12:23
快速回复:获取磁盘序列号
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017412 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved