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
Trả lời
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.
Đ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
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. :) –
Bạn có thể sử dụng Blowfish. Có một Visual Basic 6 phiên bản đó sẽ làm việc trong Access, có sẵn ở đây:
http://www.di-mgt.com.au/cryptoBlowfishVer6.html
Bạn cũng có thể thử TwoFish.
Đừng bạn đã có một mà [bạn đã cố đăng] (http://stackoverflow.com/questions/8534659/vba-ms-access-substitution-cipher)? – Deanna
@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 –