VB Base64编码类 代码

Attribute VB_Name  =   " ModBase64 "
Option   Explicit
'Powered by barenx
Public  key( 1   To   3 As   Long
Private   Const  base64  =   " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ "

Public   Sub GenKey()
    
Dim d As Long, phi As Long, e As Long
    
Dim m As Long, x As Long, q As Long
    
Dim p As Long
    
Randomize
    
On Error GoTo top
top:
    p 
= Rnd * 1000  1
    
If IsPrime(p) = False Then GoTo top
Sel_q:
    q 
= Rnd * 1000  1
    
If IsPrime(q) = False Then GoTo Sel_q
    n 
= p * q  1
    phi 
= (p - 1* (q - 1 1
    d 
= Rnd * n  1
    
If d = 0 Or n = 0 Or d = 1 Then GoTo top
    e 
= Euler(phi, d)
    
If e = 0 Or e = 1 Then GoTo top
   
    x 
= Mult(255, e, n)
    
If Not Mult(x, d, n) = 255 Then
        DoEvents
        
GoTo top
    
ElseIf Mult(x, d, n) = 255 Then
        key(
1= e
        key(
2= d
        key(
3= n
    
End If
End Sub


Public   Function Euler(ByVal a As LongByVal b As LongAs Long
    
On Error GoTo error2
    r1 
= a: r = b
    p1 
= 0: p = 1
    q1 
= 2: q = 0
    n 
= -1
    
Do Until r = 0
        r2 
= r1: r1 = r
        p2 
= p1: p1 = p
        q2 
= q1: q1 = q
        n 
= n + 1
        r 
= r2 Mod r1
        c 
= r2  r1
        p 
= (c * p1) + p2
        q 
= (c * q1) + q2
    
Loop
    s 
= (b * p1) - (a * q1)
    
If s > 0 Then
        x 
= p1
    
Else
        x 
= (0 - p1) + a
    
End If
    Euler 
= x
    
Exit Function
   
error2:
    Euler 
= 0
End Function


Public   Function Mult(ByVal x As LongByVal p As LongByVal m As LongAs Long
    y 
= 1
    
On Error GoTo error1
    
Do While p > 0
        
Do While (p / 2= (p  2)
            x 
= (x * x) Mod m
            p 
= p / 2
        
Loop
        y 
= (x * y) Mod m
        p 
= p - 1
    
Loop
    Mult 
= y
    
Exit Function
   
error1:
    y 
= 0
End Function


Public   Function IsPrime(lngNumber As LongAs Boolean
    
Dim lngCount As Long
    
Dim lngSqr As Long
    
Dim x As Long

    lngSqr 
= Sqr(lngNumber) ' get the int square root

    
If lngNumber < 2 Then
        IsPrime 
= False
        
Exit Function
    
End If

    lngCount 
= 2
    IsPrime 
= True

    
If lngNumber Mod lngCount = 0& Then
        IsPrime 
= False
        
Exit Function
    
End If

    lngCount 
= 3

    
For x& = lngCount To lngSqr Step 2
        
If lngNumber Mod x& = 0 Then
            IsPrime 
= False
            
Exit Function
        
End If
    
Next
End Function


Public   Function Base64_Encode(DecryptedText As StringAs String
    
Dim c1, c2, c3 As Integer
    
Dim w1 As Integer
    
Dim w2 As Integer
    
Dim w3 As Integer
    
Dim w4 As Integer
    
Dim n As Integer
    
Dim retry As String
    
For n = 1 To LenB(StrConv(DecryptedText, vbFromUnicode)) Step 3
        c1 
= AscB(MidB$(DecryptedText, n, 1))
        c2 
= AscB(Mid$(DecryptedText, n + 11+ ChrB$(0))
        c3 
= AscB(Mid$(DecryptedText, n + 21+ ChrB$(0))
        w1 
= Int(c1 / 4)
        w2 
= (c1 And 3* 16 + Int(c2 / 16)
        
If LenB(StrConv(DecryptedText, vbFromUnicode)) >= n + 1 Then w3 = (c2 And 15* 4 + Int(c3 / 64Else w3 = -1
        
If LenB(StrConv(DecryptedText, vbFromUnicode)) >= n + 2 Then w4 = c3 And 63 Else w4 = -1
       
        retry 
= retry + mimeencode(w1) + mimeencode(w2) + mimeencode(w3) + mimeencode(w4)
    
Next
    Base64_Encode 
= retry
End Function


Public   Function Base64_Decode(a As StringAs String
    
Dim w1 As Integer
    
Dim w2 As Integer
    
Dim w3 As Integer
    
Dim w4 As Integer
    
Dim n As Integer
    
Dim retry As String

    
For n = 1 To Len(a) Step 4
        w1 
= mimedecode(Mid$(a, n, 1))
        w2 
= mimedecode(Mid$(a, n + 11))
        w3 
= mimedecode(Mid$(a, n + 21))
        w4 
= mimedecode(Mid$(a, n + 31))
        
If w2 >= 0 Then retry = retry + ChrB$(((w1 * 4 + Int(w2 / 16)) And 255))
        
If w3 >= 0 Then retry = retry + ChrB$(((w2 * 16 + Int(w3 / 4)) And 255))
        
If w4 >= 0 Then retry = retry + ChrB$(((w3 * 64 + w4) And 255))
    
Next
    Base64_Decode 
= StrConv(retry, vbUnicode)
End Function


Public   Function mimeencode(w As IntegerAs String
    
If w >= 0 Then mimeencode = Mid$(base64, w + 11Else mimeencode = ""
End Function


Private   Function mimedecode(a As StringAs Integer
    
If Len(a) = 0 Then mimedecode = -1Exit Function
    mimedecode 
= InStr(base64, a) - 1
End Function


Public   Function Encode(ByVal Inp As StringByVal e As LongByVal n As LongAs String
    
Dim s As String
    s 
= ""
    m 
= Inp
   
    
If m = "" Then Exit Function
    s 
= Mult(CLng(Asc(Mid(m, 11))), e, n)
    
For i = 2 To Len(m)
        s 
= s & "+" & Mult(CLng(Asc(Mid(m, i, 1))), e, n)
    
Next i
    Encode 
= Base64_Encode(s)
End Function


Public   Function Decode(ByVal Inp As StringByVal d As LongByVal n As LongAs String
    St 
= ""
    ind 
= Base64_Decode(Inp)
    
For i = 1 To Len(ind)
        nxt 
= InStr(i, ind, "+")
        
If Not nxt = 0 Then
            tok 
= Val(Mid(ind, i, nxt))
        
Else
            tok 
= Val(Mid(ind, i))
        
End If
        St 
= St + Chr(Mult(CLng(tok), d, n))
        
If Not nxt = 0 Then
            i 
= nxt
        
Else
            i 
= Len(ind)
        
End If
    
Next i
    Decode 
= St
End Function


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值