Public Function EncryptString(theString As String, TheKey As String) As String
Dim X As Long
Dim eKey As Byte, eChr As Byte, oChr As Byte, tmp$
For i = 1 To Len(TheKey)
'generate a key
eKey = Asc(Mid$(TheKey, i, 1)) Xor eKey
Next
'reset random function
Rnd -1
'initilize our key as the random seed
Randomize eKey
'generate a pseudo old char
oChr = Int(Rnd * 256)
'start encryption
For X = 1 To Len(theString)
pp = pp + 1
If pp > Len(TheKey) Then pp = 1
eChr = Asc(Mid$(theString, X, 1)) Xor _
Int(Rnd * 256) Xor Asc(Mid$(TheKey, pp, 1)) Xor oChr
tmp$ = tmp$ & Chr(eChr)
oChr = eChr
Next
EncryptString = AsctoHex(tmp$)
End Function
Public Function DecryptString(theString As String, TheKey As String) As String
Dim X As Long
Dim eKey As Byte, eChr As Byte, oChr As Byte, tmp$
For i = 1 To Len(TheKey)
'generate a key
eKey = Asc(Mid$(TheKey, i, 1)) Xor eKey
Next
'reset random function
Rnd -1
'initilize our key as the random seed
Randomize eKey
'generate a pseudo old char
oChr = Int(Rnd * 256)
'start decryption
tmp$ = HexToAsc(theString)
DecryptString = ""
For X = 1 To Len(tmp$)
pp = pp + 1
If pp > Len(TheKey) Then pp = 1
If X > 1 Then oChr = Asc(Mid$(tmp$, X - 1, 1))
eChr = Asc(Mid$(tmp$, X, 1)) Xor Int(Rnd * 256) Xor _
Asc(Mid$(TheKey, pp, 1)) Xor oChr
DecryptString = DecryptString & Chr$(eChr)
Next
End Function
Private Function AsctoHex(ByVal astr As String)
For X = 1 To Len(astr)
hc = Hex$(Asc(Mid$(astr, X, 1)))
nstr = nstr & String(2 - Len(hc), "0") & hc
Next
AsctoHex = nstr
End Function
質問する
1225 次
2 に答える
6
このような暗号化を自分で実装しようとしないでください。正しく行うことは非常に難しく、誤って脆弱性を組み込むことは非常に簡単です。
機能することが証明され、十分にテストされた既存のソリューションを見つける方が、はるかに簡単で安全です。これはおそらくより良い解決策です。
于 2012-05-24T03:12:12.547 に答える
4
これにはいくつかの欠陥があります。
暗号化したシステムとは別のシステムで復号化したい場合 (またはシステムを更新した場合など) に問題が発生しRandomize eKey
ますRnd
。異なるシステムで同じシーケンスを返すことは絶対にありません。
パスワードを単一の 8 ビット値 (eKey) に減らすと、暗号化の実際のキーの長さは 8 ビットになります。
要するに: あなたのシステムに十分似たシステム (つまり、あなたの復号化が実際に平文を生成するシステム) にアクセスできる人は誰でも、あなたのDecryptString
関数を複製して eKey=0..255 で実行するだけです。
忘れて、機能するものを使用してください。自作暗号化に関する Schneier を読んでください。
于 2012-05-24T03:13:13.263 に答える