2011-12-16 44 views
8

bất cứ ai có thể đề nghị xin làm thế nào tôi có thể đạt được một phong cách thay mật mã; mã hóa và giải mã chức năng trong VBA. Tôi đánh giá cao băm được coi là cách tốt hơn nhưng tôi cần mã hóa đảo ngược. Cảm ơn nhiều.MS Access VBA Thay Cipher Encrypt/Decrypt

+0

Đừng bạn đã có một mà [bạn đã cố đăng] (http://stackoverflow.com/questions/8534659/vba-ms-access-substitution-cipher)? – Deanna

+0

@Deanna Như Jean nói tôi đã gửi nó trước đó, nhưng bỏ qua các quy tắc của stack overflow im xin lỗi để nói, cách này là tốt hơn khi mọi người đang cung cấp câu trả lời và những người khác có thể tìm thấy nó trong tương lai thông qua một google tìm kiếm vv –

Trả lời

2

Rất cám ơn cho tất cả các câu trả lời được cung cấp trong tài liệu tham khảo cho câu hỏi của tôi, nó là tốt để xem có những cách tiếp cận khác nhau, đây là một trong tôi mã hóa sáng hôm qua. Nó cho phép một từ khóa/cụm từ mật mã khác nhau được sử dụng cho cả hai chữ hoa viết thường là Upper &, tôi đã sử dụng 'Zebras' trong ví dụ này, nó cũng chạy một mật khẩu thứ hai với mật mã ROT13. mục Encryption method:

Public Function Encrypt(strvalue As String) As String 

Const LowerAlpha As String = "abcdefghijklmnopqrstuvwxyz" 
Const LowerSub  As String = "zebrascdfghijklmnopqtuvwxy" 'zebras 
Const UpperAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
Const UpperSub  As String = "ZEBRASCDFGHIJKLMNOPQTUVWXY" 'ZEBRAS 

Dim lngi   As Long 
Dim lngE   As Long 
Dim strEncrypt  As String 
Dim strLetter  As String 

If strvalue & "" = "" Then Exit Function 

For lngi = 1 To Len(strvalue) 

    strLetter = Mid(strvalue, lngi, 1) 

    Select Case Asc(strLetter) 

     Case 65 To 90 'Uppercase 
      'Find position in alpha string 
      For lngE = 1 To Len(UpperAlpha) 
       If Mid(UpperAlpha, lngE, 1) = strLetter Then GoTo USub 
      Next 
USub: 
      strEncrypt = strEncrypt & Mid(UpperSub, lngE, 1) 

     Case 97 To 122 'Lowercase 
      'Find position in alpha string 
      For lngE = 1 To Len(LowerAlpha) 
       If Mid(LowerAlpha, lngE, 1) = strLetter Then GoTo LSub 
      Next 
LSub: 
      strEncrypt = strEncrypt & Mid(LowerSub, lngE, 1) 

     Case Else 'Do not substitute 

      strEncrypt = strEncrypt & strLetter 

    End Select 

Next 

'Now pass this string through ROT13 for another tier of security 

For lngi = 1 To Len(strEncrypt) 
    Encrypt = Encrypt & Chr(Asc(Mid(strEncrypt, lngi, 1)) + 13) 
Next 

End Function 

Và đây là giải mã mà đi với nó:

Public Function Decrypt(strvalue As String) As String 

Const LowerAlpha As String = "abcdefghijklmnopqrstuvwxyz" 
Const LowerSub  As String = "zebrascdfghijklmnopqtuvwxy" 'zebras 
Const UpperAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
Const UpperSub  As String = "ZEBRASCDFGHIJKLMNOPQTUVWXY" 'ZEBRAS 

Dim lngi   As Long 
Dim lngE   As Long 
Dim strDecrypt  As String 
Dim strLetter  As String 

If strvalue & "" = "" Then Exit Function 

'Reverse the ROT13 cipher 

For lngi = 1 To Len(strvalue) 
    strDecrypt = strDecrypt & Chr(Asc(Mid(strvalue, lngi, 1)) - 13) 
Next 

'Now reverse the encryption 

For lngi = 1 To Len(strDecrypt) 

    strLetter = Mid(strDecrypt, lngi, 1) 

    Select Case Asc(strLetter) 

     Case 65 To 90 'Uppercase 
      'Find position in sub string 
      For lngE = 1 To Len(UpperSub) 
       If Mid(UpperSub, lngE, 1) = strLetter Then GoTo USub 
      Next 
USub: 
      Decrypt = Decrypt & Mid(UpperAlpha, lngE, 1) 

     Case 97 To 122 'Lowercase 
      'Find position in sub string 
      For lngE = 1 To Len(LowerSub) 
       If Mid(LowerSub, lngE, 1) = strLetter Then GoTo LSub 
      Next 
LSub: 
      Decrypt = Decrypt & Mid(LowerAlpha, lngE, 1) 

     Case Else 'Do not substitute 

      Decrypt = Decrypt & strLetter 

    End Select 

Next 

End Function 

Tôi hy vọng các mã hóa là rất đơn giản để làm theo cho những người không có kinh nghiệm rộng lớn với VBA mã hóa và nó có thể được dỡ thẳng từ trang; nhưng một lần nữa cảm ơn tất cả các câu trả lời khác.

+0

Điều này là rất yếu (lý do) một mã hóa biên giới vô lý. Hãy thử một cái gì đó mạnh mẽ hơn như RC4 có thể được thực hiện trong ít dòng mã. Xem tại đây: http://stackoverflow.com/questions/7025644/vb6-encrypt-text-using-password – wqw

+1

Tôi đánh giá cao Sub Ciphers là khá cũ và không được coi là tốt nhất nhưng tôi chỉ cần một cái gì đó đơn giản cho trường hợp này, bạn có thừa nhận mặc dù, chuỗi được mã hóa này trông khá tuyệt "S € 4-XY^-x‚ ~ -zRrur € r | - € pz € -px „-„ px- „| - ~ | zVV † -z ~ | 9- r € -r - = ‚~ -p => |" Nếu bất cứ ai có thời gian sau đó cho giải mã nó một vụ nổ, tôi muốn xem nó thực sự dễ dàng như thế nào. :) –

2

Có một ví dụ đơn giản here hoặc bạn có thể sử dụng thậm chí đơn giản hơn ROT13 mật mã.

Đây là những hữu ích cho che khuất một văn bản nhỏ, nhưng tôi không muốn sử dụng chúng cho bất cứ điều gì đó thực sự cần phải được giữ an toàn.

Các vấn đề liên quan