1楼:匿名用户
privatesubinitialize(byvalvkeystringasstring)
dimintiasinteger,intjasinteger
randomize(rnd(-1))'得到初始值(种子值)
'每次调用初始值均相同
'根据初始值(种子值)得到随机数序列,每次调用initialize时,初始值均相同。只要vkeystring相同,所产生的随机数序列一定相同
forinti=1tolen(vkeystring)
intj=rnd(-rnd*ascw(mid(vkeystring,inti,1)))
randomize(intj)
nextinti
endsub
publicsubdoxor(byrefmsfiletextasstring)
dimintcasinteger
dimintbasinteger
dimlngiaslong
forlngi=1tolen(msfiletext)
intc=ascw(mid(msfiletext,lngi,1))
intb=int(rnd()*2^7)
'选用<=127可正确处理汉字,chrw(n):n有一个范围
mid(msfiletext,lngi,1)=chrw(intcxorintb)
nextlngi
endsub
publicfunctionhash(byvaletasstring)asstring
dimbitlenstringasstring,keystringasstring,
filetextasstring
bitlenstring="12345678"
keystring=et&bitlenstring
callinitialize(keystring)
'根据keystring产生随机数序列
filetext=et&bitlenstring
calldoxor(filetext)
'根据上述随机数序列对filetext加密
keystring=filetext
callinitialize(keystring)
'根据上述的加密结果产生新的随机数序列
filetext=bitlenstring
calldoxor(filetext)
'根据上述随机数序列对filetext加密,8位字符
hash=filetext
'8位字符送作hash值
endfunction
privatesubbutton8_click(byvalsenderassystem.object,byvaleassystem.eventargs)handlesbutton8.
click
dimstrasstring="abcd"&vbcrlf
textbox6.text=str&hash(str)
endsub
如何用vb实现hash函数的各个算法
2楼:匿名用户
private sub initialize(byval vkeystring as string)
dim inti as integer, intj as integer
randomize(rnd(-1)) '得到初始值(种子值)
'每次调用初始值均相同
'根据初始值(种子值)得到随机数序列,每次调用initialize时,初始值均相同。只要vkeystring相同,所产生的随机数序列一定相同
for inti = 1 to len(vkeystring)
intj = rnd(-rnd * ascw(mid(vkeystring, inti, 1)))
randomize(intj)
next inti
end sub
public sub doxor(byref msfiletext as string)
dim intc as integer
dim intb as integer
dim lngi as long
for lngi = 1 to len(msfiletext)
intc = ascw(mid(msfiletext, lngi, 1))
intb = int(rnd() * 2 ^ 7)
'选用< =127可正确处理汉字,chrw(n):n 有一个范围
mid(msfiletext, lngi, 1) = chrw(intc xor intb)
next lngi
end sub
public function hash(byval et as string) as string
dim bitlenstring as string, keystring as string,
filetext as string
bitlenstring = "12345678"
keystring = et & bitlenstring
call initialize(keystring)
'根据keystring产生随机数序列
filetext = et & bitlenstring
call doxor(filetext)
'根据上述随机数序列对filetext加密
keystring = filetext
call initialize(keystring)
'根据上述的加密结果产生新的随机数序列
filetext = bitlenstring
call doxor(filetext)
'根据上述随机数序列对filetext加密,8位字符
hash = filetext
'8位字符送作hash值
end function
private sub button8_click(byval sender as system.object, byval e as system.eventargs) handles button8.
click
什么是哈希算法?
3楼:匿名用户
举个更形象点的例子。
这东西其实就像字典(其实就是)。你给出来的字符串是一个单词,他在字典里面所属的条目是a-z其中一个字母。不管你给的单词有多长,他总属于字典中某一个目录下(也就是首字母。。
)。你现在有两个单词,你不知道他们都是什么,但是你知道一个在“a”里面一个在“e”里面。这样你就知道这俩肯定不是同样的单词。
不过由于每个条目下都有一大堆的单词,所以你还是不知道这两个单词具体是什么。
当然也有很大的概率两个单词都在e里面,这种情况叫做一种“碰撞”。两个不同的东西生成了同样的结果。拿到360的例子上来说就是,你开了家**,起了个特别诡异的名字,用奇虎的哈希算法算出来的结果和某个不良**一样。
那么你的**就被当不良**屏蔽掉了。
一个好的哈希算法要保证尽可能的少产生碰撞。还是说你之前查字典的例子。这次你把字典拆了。
给里面每个首字母下面又加了26个条目,分别是a-z,里面装着以这些当结尾的单词。这样你随便挑两个单词是一个坑里出来的概率就小多了。
然后突然你有一天觉醒了。感觉就差俩单词太费劲了。所以你买了本空字典,把天下单词挨个试一遍,终于把所有目录里面都填满了。
然后你以后找单词就很方便了。别人给你一个单词首字母是a,你就随便从a里面找个应附上。虽然不知道是不是他说的那个,但至少看起来是一个坑里出来的就过关了。
这字典就叫彩虹表。这东西写起来比较耗时。没准你算了二十年发现试过的那些单词首字母全是xyz,但是人家每次给的都是eta,那之前的活都白干了。
虽然这种方法得到的不是原始记录,而仅仅是与之具有相同特征的记录。而且有这个特征的记录可能有一大堆。有的时候你碰巧拿到的就是原来的那个,但大多数拿到的都是垃圾。
如果你的表很全的话,那很有可能一堆记录里面有个和原来的那条一模一样的。这时候你可以根据别的什么信息猜猜找的是什么。比如你俩正打架,然后找出来他给你的单词是f开头的,那基本上就能猜出来了。
这就是哈希算法。一个好的哈希算法仅仅知道结果的话是极难反算出原始数据来的,特别是有意义的原始数据。
4楼:诸葛恕褚女
哈希函数是一个数学方程式,它可用文本(如电子邮件信息)来生成称为信息摘要的**。著名的哈希函数如:md4,md5,shs。
用于数字鉴别的哈希函数必须有特定的属性,使它在密码使用方面有足够的安全性。尤其是,下面的内容一定不能被发现:
用来哈希出特定值的文本。也就是说,如果你知道信息摘要,你应该不能解出信息的内容。
用来哈希出相同值的两个不同的信息。
如果能够发现用来哈希出特定值的某个信息,攻击者就能够用假信息替代经过签名的真信息。而有些人也能够声称自己实际上签名了哈希出相同值的一个不同的信息,以此虚假地否认这条信息。这样就破坏了数字签名的无法否认的属性。
如果能够发现用来哈希出相同值的两个不同的信息,攻击者就能够给一个信息签名,这个信息和另一个信息都可以哈希出相同值,但二者的意思却是完全不同。
什么是哈希算法,哈希函数主要有哪些?
5楼:半神_禹
额。。lz是不是看了**绘的终极解密啊?
我也蛮感兴趣滴。。嘿嘿,
哈希函数是一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系。
将数据元素的关键字k作为自变量,通过一定的函数关系(称为哈希函数),计算出的值,即为该元素的存储地址。表示为:
addr = h(key)
为此在建立一个哈希表之前需要解决两个主要问题:
⑴构造一个合适的哈希函数
均匀性 h(key)的值均匀分布在哈希表中;
简单 以提高地址计算的速度
⑵冲突的处理
冲突:在哈希表中,不同的关键字值对应到同一个存储位置的现象。即关键字k1≠k2,但h(k1)= h(k2)。
均匀的哈希函数可以减少冲突,但不能避免冲突。发生冲突后,必须解决;也即必须寻找下一个可用地址。 无论哈希函数设计有多么精细,都会产生冲突现象,也就是2个关键字处理函数的结果映射在了同一位置上,因此,有一些方法可以避免冲突。
1.拉链
拉出一个动态链表代替静态顺序储存结构,可以避免哈希函数的冲突,不过缺点就是链表的设计过于麻烦,增加了编程复杂度。此法可以完全避免哈希函数的冲突。
2.多哈希法
设计二种甚至多种哈希函数,可以避免冲突,但是冲突几率还是有的,函数设计的越好或越多都可以将几率降到最低(除非人品太差,否则几乎不可能冲突)。
3.开放地址法
开放地址法有一个公式:hi=(h(key)+di) mod m i=1,2,...,k(k<=m-1)
其中,m为哈希表的表长。di 是产生冲突的时候的增量序列。如果di值可能为1,2,3,...m-1,称线性探测再散列。
如果di取1,则每次冲突之后,向后移动1个位置.如果di取值可能为1,-1,2,-2,4,-4,9,-9,16,-16,...k*k,-k*k(k<=m/2)
称二次探测再散列。如果di取值可能为伪随机数列。称伪随机探测再散列。
4.建域法
假设哈希函数的值域为[0,m-1],则设向量hashtable[0..m-1]为基本表,另外设立存储空间向量overtable[0..v]用以存储发生冲突的记录。
lz先把自己现阶段的函数搞定,会慢慢接触高等的函数滴,感觉蛮刺激的。。
区块链中哈希算法的特点是什么,区块链中的哈希算法是什么?
1楼 hoo虎符 哈希算法可以作为一个很小的计算机程序来看待,无论输入数据的大小及类型如何,它都能将输入数据转换成固定长度的输出。哈希算法在任何时候都只能接受单条数据的输入,并依靠输入数据创建哈希值。 根据最终产生的哈希值的长度不同,有不同的哈希算法。 在区块链中使用的为加密哈希算法,其特点有 1 ...
常用的散列函数有哪些,常用的构造哈希函数的方法有哪些
1楼 匿名用户 常用的哈希函数 1 rs 从robert sedgwicks的 algorithms in c一书中得到了。我 原文作者 已经添加了一些简单的优化的算法,以加快其散列过程。 java view plaincopyprint public long rshash string str ...
在乘法算式中因数,在数学乘法算式里因数是代表什么
1楼 半夏初序 假如a b c a b c都是整数 ,那么称b和c就是a的因数。需要注意的是,唯有被除数,除数,商皆为整数,余数为零时,此关系才成立。 反过来说,我们称a为b c的倍数。 在研究因数和倍数时,不考虑0。 比如,2 3 6中,2和3都是6的因数。 乘法运算中的因数也叫做乘数。 2楼 匿...