простой, но безопасный шифрование / дешифрование asp на asp.net - PullRequest
0 голосов
/ 13 апреля 2010

Первый пост здесь.

У меня есть веб-приложение asp / vb6, которое регистрирует пользователя. Я хочу зашифровать поле идентификации пользователя и передать (querystring) его в приложение asp.net, а затем расшифровать его для поиска в базе данных.

Я, конечно, запустил Google и обнаружил, что rot13 недостаточно безопасен. Я также нашел несколько обращений к MD5 / RC4, но не нашел хороших примеров шифрования / дешифрования.

Спасибо

Michael

Ответы [ 3 ]

1 голос
/ 14 апреля 2010

Я согласен с @Brian - не занимайтесь созданием собственного крипто, крипто легко, пока вы не начнете управлять ключами. Используйте SSL / TLS, если у вас очень ОЧЕНЬ V.E.R.Y. веская причина не делать этого.

1 голос
/ 14 апреля 2010

Обычно допускается, что вам никогда не следует расшифровывать такую ​​информацию, а лучше сравнивать зашифрованные с зашифрованными.

MD5, например, может использоваться в этой «ловушке».Кодируйте информацию, затем сохраните хэш MD5.Когда вам нужно пройти аутентификацию, закодируйте новую информацию и сравните хэши.Незашифрованная информация никогда не раскрывается и не доступна.

Если это не подходит для вашей ситуации, обратитесь к Windows Crypto API, который предлагает альтернативы, позволяющие шифровать / дешифровать полный цикл.

0 голосов
/ 17 апреля 2010

Вот базовый пример шифрования. Вы захотите выяснить свой собственный ключ. Я сделал мой способ просто добавить еще один уровень сложности (я надеюсь). Как указывает Джим, вы можете использовать это, чтобы зашифровать новый пароль, а затем сохранить результаты. После того, как пароль создан вместо того, чтобы пытаться расшифровать это значение (что является обратным), вы должны зашифровать введенный пароль и сравнить его с сохраненным значением.

'combine these constants to build the encryption key'
Private Const KEY1 = "abcde"
Private Const KEY2 = "fghij"
Private Const KEY3 = "klmno"
Private Const KEY4 = "pqrst"
Private Const KEY5 = "uvwxy"

Private Function Encrypt(ByVal s As String, ByVal EncryptionType As  CAPICOM.CAPICOM_ENCODING_TYPE) As String
   Dim oEN As New CAPICOM.EncryptedData
   Dim intENCType As CAPICOM.CAPICOM_ENCRYPTION_ALGORITHM
   Dim strSecret As String
   Dim intTries As Integer

   On Error GoTo errEncrypt

   intENCType = CAPICOM_ENCRYPTION_ALGORITHM_AES ' try this first and fall back if not supported'

   With oEN
startEncryption:
      .Algorithm = intENCType
      strSecret = KEY2 & KEY5 & KEY4 & KEY1 & KEY3
      .SetSecret strSecret
      strSecret = ""
      .Content = s
      ' the first encryption type needs to be base64 as the .content property'
      ' can loose information if I try to manipulate a binary string'
      .Content = StrReverse(.Encrypt(CAPICOM_ENCODE_BASE64))
      strSecret = KEY1 & KEY4 & KEY3 & KEY2 & KEY5
      .SetSecret strSecret
      strSecret = ""
      Encrypt = .Encrypt(EncryptionType)
   End With

   Set oEN = Nothing

   Exit Function

errEncrypt:
   If Err.Number = -2138568448 Then
      ' if this is the first time the step the encryption back and try again
      If intTries < 1 Then
         intTries = intTries + 1
         intENCType = CAPICOM_ENCRYPTION_ALGORITHM_3DES
         Resume startEncryption
      End If
   End If

   Err.Raise Err.Number, Err.Source & ":Encrypt", Err.Description
   strSecret = ""
   Set oEN = Nothing

End Function
...