回 帖 发 新 帖 刷新版面

主题:VFP怎样给字串加密

给字串加密,在C语言和VB里都好办.可是在VFP中,能实现这个功能吗
比如,要想给字串AS45W6GHU6加密.变成另外一个与之毫无相同之处的字串(不超过8位).这个字串还是用字母和数字表示.该怎么办.?
敬请行家指教.

回复列表 (共25个回复)

11 楼

[b]乌鸦[/b] 你说的没错!公开密钥 MD5 DES 等(银行的64位加密密钥) 都是公钥加密,我国女博士攻克了其解密的算法也是真的,但我所讲的是“私钥”加密。乌鸦你还不知到?现在反古归真了。。。哈哈请看:

中国银行的动态口令牌(E-TOKEN)
什么是动态口令牌?
答:动态口令牌是一种内置电源、密码生成芯片和显示屏、根据专门的算法每隔一定时间自动更新动态口令的专用硬件。基于该动态密码技术的系统又称一次一密(OTP)系统,即用户的身份验证密码是变化的,密码在使用过一次后就失效,下次登录时的密码是完全不同的新密码。作为一种重要的双因素认证工具,动态口令牌被广泛地运用于安全认证领域。动态口令牌可以大大提升网上银行的登录和交易安全。

再看:
“快钱盾”是保护商家快钱账户安全的硬件产品,它采用了国际上最先进的动态密码算法,其外形类似于小型U盘,携带方便, 是目前网上银行客户端安全级别最高的一种安全工具。快钱盾每次实时生成不同的密码,避免了因静态密码被盗导致的账户安全风险。 产生的动态密码只能被用户使用一次,无法重复使用。一次性密码增强了安全性。 动态密码是随机生成、无规律的。即使本次密码被窃取,也难以由此猜出下次的密码。 (可见和现在中国银行的动态口令牌是一样的啊)。

还有:
最简单的“工商银行口令卡”就是一张纸卡哦(口令卡上以矩阵形式印有若干字符串,客户在使用电子银行进行对外转账、B2C购物、缴费等支付交易时,电子银行系统会随机给出一组口令卡坐标,客户根据坐标从卡片中找到口令组合并输入电子银行系统,只有口令组合输入正确的客户才能完成相关交易,该口令组合一次有效,交易结束后即失效)。。。。。还有许多不再列举了。。。这些一切的原理就是鬼子60几年前用过的啊,不过只是加上了现代的“电子”包装而已。。。

12 楼

好象又回到了6楼  wuzhouhong 狐友的话题了。没错60几年前中美联合成立的“黑室”就是你所说的“只要一张纸和一杆笔”但破解鬼子的密码的先决条件就是要找到那本“书”--英文版的“大地”。那在银行独自发行的那本“书”又在那呢,印刷机在银行服务器里,它为每一用户都印了一本绝版的书,而且每一页都不同,其中的某一页就在某一客户手里。。。“只要一张纸和一杆笔”可以解吗?当然行了!叫某一客户“给”你抄一遍就行了。。。。哈哈哈。。。。如有冒犯敬请原谅!!再次谢谢“乌鸦”和“wuzhouhong 狐友”。。。。

13 楼

银行的动态加密和数字通讯加密使用的是相类似的原理。加密机的加密模块是经常更换的,窃取这种机密的最好办法是使用间谍,因为既便是现代的计算机,做逆向工程也是需要很多时间和很多人力。

乌鸦对加密没有研究,只知道大概如此。

14 楼

对于foxdb同学的见解,我表示钦佩。我没有看过什么《大地》,我只知道目前市面可以公开买到的密码书籍涉及的技术都是50年前的,或者说都已经脱密了的。0901chang先生说的那件事我知道,一个中国女人,发现了MID5算法的哈希算法存在可预测的概率性,为穷尽法指明了缩短时间的途径。

还是围绕foxdb同学提出的问题,我来解开你的密码,首先假设我不知道你用的何种算法,只有一段密文:晤糑諻蒁蝩罧
和一段已知的明文:好比我们上街

我猜测密文和明文之间存在某种联系,于是逐个字节分析关系
得到密文和明文的ASCII序列
密文:206,238,188, 75,214, 87,201, 68,206,117,193, 75 
明文:186,195,177,200,206,210,195,199,201,207,189,214
差值: 20, 43, 11,-125, 8,-123, 6,-131, 5,-90, 4,-139
但是我现在还不知道究竟是什么关系,于是我再想办法制造了一段明文,然后想办法让你加密,于是我又获得了一段密文(用你上面写的程序加密)。
密文:蹄訰荰藈祇蜘
明文:父上肯批吧娣
再次分析ASCII码
密文:204,227,212, 82,199, 84,203,119,181,111,214,169
明文:184,184,201,207,191,207,197,250,176,201,230,183 
差值: 20, 43, 11,-125, 8,-123, 6,-131, 5,-90,-16,-14

我获得了一个重要发现,就是两次加密,获得了同一个差值序列“20, 43, 11,-125, 8,-123, 6,-131, 5,-90”只有后面2位不一样,不过这就已经足够了,我判断你的密码就是明文的ASCII码依次加/减掉上述的差值。

到这里,foxdb同学的密码已经基攻破,剩下的就是再发一段明文进行验证了,经过测试,发现后面的的两位加密不同,是因为程序有缺陷,原来的信息被破坏掉了,在某种情况下,加密程序自己也无法还原自己的密文,就是“chn=chn-4995”这段造成的。


15 楼

既然在这里讨论密码,我编写了一段VF程序,给出了一段明文和一段相应的密文,请各位同学分析下最后一段密文的明文。

加密方法:ASCII移位
提示:密文信息中添加了一部分其他的信息,并且密文没有丢失明文的信息,明文可以完全被还原。

明文:中国人民是不可战胜的!
密文:4=vP4菡瞅让盔饰返飞凸绚忌潤4**G


明文:中华人民共和国
密文:G!PPP凼蘑拿框狗粗宾m**=

密文:c=*cv甘戳桑彤剃渔完磐cPc4
明文?

16 楼

14楼 wuzhouhong 狐友 的分析没有任何意义! 

首先你假定“已知”“好比我们上街”这段明文,推到出 差值: 20, 43, 11,-125, 8,-123, 6,-131, 5,-90, 4,-139 这差值对破解以后的密文没有任何帮助。因为密钥"最好放到存车处"只是用一次
下次可能是:"大部分不会丢失"。假如你“不知到”我还是用:“好比我们上街”这段明文来加密,密文就是:“縱碐謍艬誴腀”。那你得到的原来得到的差值:还会有帮助吗? 

1、用“好比我们上街”对“晤糑諻蒁蝩罧”的“差值”来解 “縱碐謍艬誴腀”密文 明文又是些啥呢?有规律吗?(当然假定第二次加密的明文你是不知道的,知道了还用解吗?)

我的密文是:“事詆腍墟虅” 用的是8楼的程序加密!你告诉我明文是啥?试试看?要是解不出(我就公布答案),你叫楼主给俺加分。要是你解得出,我愿意送一份“厚礼”给您!。。。。

2、至于“程序有缺陷”你别忘了我说过:“上面的“演示”只是个原理,如要真正实用还有很长的“路”要走....”给的只是思路!能够“演示”这就足够了。。。不知你看“明白”了没有?

17 楼

14楼 wuzhouhong 狐友 你的"ASCII移位"加密方法我是有不同看法,起码楼主没采纳“请参见4楼意见”这是因为加密后的是“乱码”没能满足楼主的要求!而且长度不还可能超出明文,这对数据库结构对原来数据已设固定长度来说:用户“极”不方便,也许我没能领会你的原意,但我们在这主要是帮楼主解决问题,解决了我的目的也就达到了。好了不说了我真诚的期待您能回答我16楼的答案,既然你说我的“密码已经基攻破”那就用行动来兑现吧。。。。。期待中........................

18 楼

foxdb同学看来对自己的程序很有信心,我不知道事詆腍墟虅是什么东西,回答这个问题就好像去求解只有一个方程,但是有3个未知数的方程组。
但是根据先前的分析,知道你得密码和明码之间是一个差值,这个差值和你的“密钥”直接相关。

既然这样,我们直接在密文ASCII的基础上加N,然后看这个加N后的字符是否有意义,如果出现有意义的字符则保留,对下一字符同样处理,直到整句话都变成有意义的字,这样的结果肯定有很多个,然后再从中挑选出一批进行测试,密码一定在里面。由于总的计算量=255的10次方,我的计算机干不了这事。不过换一台小型机就可以了。

另外,刚才我假设不知道你的加密方法,而现在我假设获取了你的加密方法,仅不知道你的“密钥”而已。我用你的解密程序,用我已知的密钥“最好放到存车处”,得到解密的明文“稐射济薸寝”,用这个明文,再次用已知密钥加密的结果还是“事詆腍墟虅”,就是说,我使用了两个明文,一个是“稐射济薸寝”,还有一个是你的新的明文(暂称X),得到一个相同的密文"事詆腍墟虅"

于是我采取另一种攻击方法,我使用自己制造出来的明文“稐射济薸寝”和已知的对应密钥“最好放到存车处”放到你的程序中,用我的密钥代替你的密钥,结果肯定得出和X密码同样的结果,如果这是个口令程序,那么我已经绕开了他的验证,当然这时候我还是不知道明文是什么。

关于解密的问题,“如果没有进一步的线索,短的报文段不会提示其含义的。 (J.Friedrichs)”,foxdb同学如果用这个密钥对一段长度超过密钥的明文进行加密,那不可避免的是密钥的信息会在密文中重复出现,到时候我就可以采取简单的ASCII比较方法就能解读出明文。

为了方便你理解我的想法
我给出一个密码的示范:
密码:123456
明文:今天是晴天

因为我的密码表是这样规定的:
123=今天
4=是
56=晴天
你能从123456看出“今天是晴天”吗?
但是如果我用这个代码表重复加密一大段文章,那么123\4\56这些代码必定会重复出现,谁都能解读出信息。

19 楼

18楼 wuzhouhong 首先声明我和你不是同学,我在这里不是来学习,因为“学习”的过程早已结束。我现在是用VFP代码来赚钱,不是来讨论写论文!至于我在这里我上这个论坛,是因为大家都是VFP的爱好者--“狐友”,本着“交流”和帮助“新手”我很乐意回答楼主的问题,你尽可看看我参与的话题对我有个了解(如果你愿意的话)。。。。

虽然我同你没能有共同的“语言”但我还是要明确的告诉你:

“事詆腍墟虅”和 “好比我们上街”“最好放到存车处”“縱碐謍艬誴腀”字符串没有任何内在的关系。请看下面答案:(你可剪贴到VFP中去运行看看)

*加密“演示”
?
?
cs="动态口令牌"       &&  明码
ke="字符串一二"     &&  密钥
ct=""
i=1
DO WHILE i<LEN(cs)
    ch=SUBSTR(cs,i,2)
    ky=SUBSTR(ke,i,2)
    chn=ASC(ch)+(ASC(ky)-45120)
    IF chn>55110
       chn=chn-4995    
    ENDIF
    ct=ct+CHR(chn)
    i=i+2
ENDDO
?cs  &&  明码
?ke  &&  密钥
?ct  &&  加密后的字符串为 “事詆腍墟虅”
?
?

*解密“演示”
cs="事詆腍墟虅" &&  加密后的字符串
ke="字符串一二"  &&  密钥
ct=""
i=1
DO WHILE i<LEN(cs)
    ch=SUBSTR(cs,i,2)
    ky=SUBSTR(ke,i,2)
    chn=ASC(ch)-(ASC(ky)-45120)
    IF chn<45120
       chn=chn+4995    
    ENDIF
    ct=ct+CHR(chn)
    i=i+2
ENDDO
?cs  &&  加密后的字符串
?ke  &&  密钥
?ct  &&  解密后的字符串 "动态口令牌"


由此可见当你不知道一次性的(注意是一次性的)密钥“字符串一二”字符串, 只得到“事詆腍墟虅”要想得到“动态口令牌”字符串,就算你知道加密方法(如我给出的“示范”程序)也是解不出的。。。

我再次强调我在“本话题”主要是帮助楼主解决问题,楼主的问题解决了,我的目的也就达到了,我不会再回帖,还是我在本论坛常说的那句话:“如果楼主的问题已解决,(本来在5楼就应结贴)就没必要在费时争论!毕竟大家的时间也很宝贵!除非二位另发新贴。。。再见。。。

20 楼

首先对foxdb这种好为人师的作风表示敬仰。和foxdb不同的是,我到这里来是抱着学习的目的来的,山外青山楼外楼,没有谁是绝对的老大。这这里,我得到了Setup2go安装程序,得到了渐变色按钮,得到了整套帮助文件等等。在这里对于FOX本色、labxj0769、lwh1188、cbl518、种子乐等大佬以及回复我帖子不吝赐教的各位同学(包括foxdb)表示感谢。

对foxdb的程序,我自始至终没有产生过怀疑,我确认它是能产生密码的。但是ASCII移位的方式,我在很多年前使用FOXPRO2.5的时候就已经探索过了,出于对自己制造的密码的好奇,研究了一阵,事实证明ASCII移位是极不可靠的系统。我相信foxdb也是知道单纯的移位不能确保安全性,所以搞了个“动态密钥”系统出来。但是这就像在一扇木门外加了把铁锁,其实安全性并没有提高,因为ASCII移位本身就是安全系统里面的短板。系统的安全性取决于最薄弱的那个环节!
密码保持和明文一样的长度,至少已经泄漏密码有多长,而且加密后的字符顺序和明文的顺序是一致的,不管foxdb的程序如何复杂,实际上密码和明文之间只存在一个简单的加减关系而已。
当然,我们不是在探讨如何解密的问题,我们是在解决如何加密。我知道foxdb的意图是想帮助楼主解决问题,但首先请foxdb先把程序调试好再说吧。用以下我随便找的明文测试下:口令牌牌、口令牌牌一二、中华人民共和国,程序全部爆错!

我的时间也很宝贵,和foxdb不同的是,我不依靠VF吃饭,VF在我工作中最多起到锦上添花的作用,我也还有很多其他事情要做,但是不把事情整理清楚,不是我的风格。至于foxdb回不回帖,那是foxdb的自由,我怎么能干涉呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册