СообЧа > База Знаний > Программирование > Visual Basic

Вопрос

Мне нужно зашифровать строку и сохранить ее в базе, потом через определенное время расшифровать. Как это сделать? В самой виндовс есть какие-то библиотеки , но ничего поэтому поводу толкового непонял.

Ответ

CryptoAPI. Если в .NET, то смотри на System.Security.Criptography.

Павел Сурменок

Самое лучшше, это CriptoApi, но можно замуть и через SSPI, правда последний ориентирован на защищенную передачу и обращается к первому.

Если нужно что то разовое и не взломоустойчивое, то можно воспользоватся Cipher и еще в какую нибуть кодировку это загнать, типа BASE64, что догадатся труднее было, но такое решение имеет низкую взломоустойчивость.

Ivan Rozhuk

Public Function dhXORText(strText As String, strPWD As String) As String
     Dim abytText() As Byte
     Dim abytPWD() As Byte
     Dim intPWDPos As Integer
     Dim intPWDLen As Integer
     Dim intChar As Integer
     
     abytText = strText
     abytPWD = strPWD
     intPWDLen = LenB(strPWD)
     For intChar = 0 To LenB(strText) — 1
         ' Get the next number between 0 and intPWDLen — 1
         intPWDPos = (intChar Mod intPWDLen)
         abytText(intChar) = abytText(intChar) Xor _
          abytPWD(intPWDPos)
     Next intChar
     dhXORText = abytText
End Function

Самый простой, но не лучший пример шифрования, но «не посвященные» вряд ли смогут взломать файл зашифрованный такими способом.

Krueger

Public Function EnCrypt(Text As String, password As String) As String
     Dim l As Long
     Dim lngPassPos As Long
     Dim lngPassLen As Long
     Dim intCode As Integer
     Dim strtemp As String
     
     If Len(Text) = 0 Or Len(password) = 0 Then
         EnCrypt = Text
         Exit Function
     End If

     
     lngPassLen = Len(password)
     lngPassPos = 1
     
     For l = 1 To Len(Text)
         intCode = Asc(Mid(Text, l, 1)) + Asc(Mid(password, lngPassPos, 1))
         If intCode > 255 Then intCode = intCode — 255
         strtemp = strtemp & Chr(intCode)
         
         lngPassPos = lngPassPos + 1
         If lngPassPos > lngPassLen Then lngPassPos = 1
     Next l
     EnCrypt = strtemp
End Function

Public Function DeCrypt(Text As String, password As String) As String
     Dim l As Long
     Dim lngPassPos As Long
     Dim lngPassLen As Long
     Dim intCode As Integer
     Dim strtemp As String
     
     If Len(Text) = 0 Or Len(password) = 0 Then
         DeCrypt = Text
         Exit Function
     End If
         
     lngPassLen = Len(password)
     lngPassPos = 1
     
     For l = 1 To Len(Text)
         intCode = Asc(Mid(Text, l, 1)) — Asc(Mid(password, lngPassPos, 1))
         If intCode < 1 Then intCode = intCode + 255
         strtemp = strtemp & Chr(intCode)
         
         lngPassPos = lngPassPos + 1
         If lngPassPos > lngPassLen Then lngPassPos = 1
     Next l
     DeCrypt = strtemp

End Function

Public Function LoadTextFile(Path As String) As String
   Dim strFile As String
       
   Open Path For Binary As #1
   strFile = Space$(LOF(1))
   Get 1, , strFile
   Close #1
   LoadTextFile = strFile
End Function

Public Function SaveTextFile(Path As String, Text As String)
     Open Path For Output As #1
     Print #1, Text
     Close #1
End Function

Сам алгоритм элементарный — складываем код символа текста с кодом символа пароля, если получилось >255, то отнимаем 255. Расшифровка происходит в обратном порядке.

Артем Кривокрисенко



Copyright © 2000-2004 Сообщество Чайников
Контактная информация