VB的RC4加密演算法,支援中文

2021-04-18 20:29:16 字數 2412 閱讀 4448

最近需要用vb寫個小測試程式,所以把荒廢了很久很久的vb翻了出來,從網上找了個10來兆的綠色版裝上了。**中測試中需要用到rc4的演算法,於是從網上搜了一圈,結果很是失望,真正能用的幾乎沒有,網路上四處傳播的那個**,演算法上應該說還是對的,但是採用string作為函式引數,結果處理的反而成錯的了。這個錯誤的東西還四處傳播,真是天下文章一大抄啊,居然這麼多轉貼的就沒人做個簡單的測試?     於是順手按照c的**,簡單寫了個程式,採用的是byte陣列來傳遞引數。呼叫的時候,可以採用strconv將普通的string和byte陣列做轉換,或者省事就直接用string也是沒問題的。

option base 0

public type rc4_key

s(256) as byte

x as byte

y as byte

end type

public sub prepare_key(byref key_data() as byte, byref key as rc4_key)

dim i as long, j as byte, keylen as long, c as integer

for c = 0 to 255

key.s(c) = c

next

key.x = 0

key.y = 0

i = 0

j = 0

keylen = ubound(key_data) - lbound(key_data) + 1

for c = 0 to 255

j = ((key_data(i) mod 256) + key.s(c) + j) mod 256

key.s(c) = key.s(c) xor key.s(j)

key.s(j) = key.s(c) xor key.s(j)

key.s(c) = key.s(c) xor key.s(j)

i = (i + 1) mod keylen

next

end sub

public sub rc4(byref buff() as byte, byref key as rc4_key)

dim x as byte, y as byte, z as byte, c as long, ub as long, lb as long

x = key.x

y = key.y

ub = ubound(buff)

lb = lbound(buff)

for c = lb to ub

x = (x + 1) mod 256

y = ((key.s(x) mod 256) + y) mod 256

key.s(x) = key.s(x) xor key.s(y)

key.s(y) = key.s(x) xor key.s(y)

key.s(x) = key.s(x) xor key.s(y)

z = ((key.s(x) mod 256) + key.s(y)) mod 256

buff(c) = buff(c) xor key.s(z)

next

key.x = x

key.y = y

end sub

呼叫的方法     dim s() as byte, p() as byte     dim enkey as rc4_key, denkey as rc4_key         s = "1234567890abcdefghijklmnopqrstuvwxyz中文"     p = "123abc測試"         call prepare_key(p, enkey)     denkey = enkey         call rc4(s, enkey)     call rc4(s, denkey)     msgbox s 如果是多個內容加密,也可以分段解密,或者一次解密全部內容     dim s() as byte, p() as byte     dim enkey as rc4_key, denkey as rc4_key         s = "1234567890abcdefghijklmnopqrstuvwxyz中文"     p = "123abc測試"         call prepare_key(p, enkey)     denkey = enkey         call rc4(s, enkey)     dim s2() as byte, s3() as byte         s2 = "資訊abcd1234"     call rc4(s2, enkey)         redim s3(0 to ubound(s) + ubound(s2) + 1)     call copymemory(s3(0), s(0), ubound(s) + 1)     call copymemory(s3(ubound(s) + 1), s2(0), ubound(s2) + 1)     call rc4(s3, denkey)     msgbox s3

RC4加密演算法

rc4於1987年提出,和des演算法一樣,是一種對稱加密演算法,也就是說使用的金鑰為單鑰 或稱為私鑰 但不同於des的是,rc4不是對明文進行分組處理,而是位元組流的方式依次加密明文中的每乙個位元組,解密的時候也是依次對密文中的每乙個位元組進行解密。rc4演算法的特點是演算法簡單,執行速度快,而且...

RC4加密演算法

簡介 包括初始化演算法 ksa 和加密演算法兩大部分 主要 初始化部分 這個基本上是固定的 void rc4 init unsigned char s,unsigned char key,unsigned long len s最開始是傳入的長度為256的char型空陣列,用來存放初始化後的s key...

RC4加密演算法

rc4於1987年提出,和des演算法一樣,是一種對稱加密演算法,也就是說使用的金鑰為單鑰 或稱為私鑰 但不同於des的是,rc4不是對明文進行分組處理,而是位元組流的方式依次加密明文中的每乙個位元組,解密的時候也是依次對密文中的每乙個位元組進行解密。rc4演算法的特點是演算法簡單,執行速度快,而且...