Как хранить пароль

Тема в разделе "Lotus + Java + LS2J", создана пользователем DNT, 18 май 2010.

  1. DNT

    DNT Постоялец форума
    Lotus team

    Регистрация:
    12 окт 2005
    Сообщения:
    592
    Симпатии:
    7
    Подключаюсь к внешней БД (не Лотус) используя агент на LS. При подключении ессно нужно указывать логин/пароль. Хочу у вас поинтересоваться как этот пароль хранить? Есть может какая нибудь функция хеширования? Явно его указывать в коде совсем не хочется.
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Хранить в документе в шифрованном поле.
     
  3. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    ну а если функции хеширования интересуют есть к примеру sha1.

    Код (Text):
    Option Public
    Option Explicit

    Sub Initialize

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim plaintext As String, hashtext As String

    plaintext = "текст для шифрования"
    hashtext = sha1(plaintext)


    End Sub

    Function tohex (value As Long) As String
    tohex = Right(String(8, "0") & Hex(value), 8)
    End Function
    Function tobin (value As Long) As String
    tobin = Right(String(32, "0") & Bin(value), 32)
    End Function
    Function bin2dec (binstr As String) As Long
    bin2dec = Clng(Val("&B" & binstr & "&"))
    End Function
    Function rshift (value As Long, count As Integer) As Long
    '** bit shift right
    Dim binstr As String
    binstr = Left(String(count, "0") & tobin(value), 32)
    rshift = bin2dec(binstr)
    End Function
    Function lshift (value As Long, count As Integer) As Long
    '** bit shift left
    Dim binstr As String
    binstr = Right(tobin(value) & String(count, "0"), 32)
    lshift = bin2dec(binstr)
    End Function
    Function rol (value As Long, count As Integer) As Long
    '** circular left-shift
    Dim binstr As String
    binstr = tobin(value)
    rol = bin2dec(Right(binstr, 32-count) & Left(binstr, count))
    End Function
    Function add32 (a As Long, b As Long) As Long
    '** 2's complement addition, returning only the first 32-bits of the sum
    '** (this version is from Damien Katz's BitOperations library)
    If ((a Eqv b) And &h80000000&) Then
    add32 = ((&h80000000& Xor a) + b) Xor &h80000000&
    Else
    add32 = a + b      
    End If
    End Function
    Function f (b As Long, c As Long, d As Long, t As Long) As Long
    Select Case t
    Case Is < 20 :
    f = (b And c) Or ((Not b) And d)
    Case Is < 40 :
    f = b Xor c Xor d
    Case Is < 60 :
    f = (b And c) Or (b And d) Or (c And d)
    Case Else :
    f = b Xor c Xor d
    End Select 
    End Function
    Function k (t As Long) As Long
    Select Case t
    Case Is < 20 :
    k = &H5A827999      '** 1518500249 in decimal
    Case Is < 40 :
    k = &H6ED9EBA1      '** 1859775393 in decimal
    Case Is < 60 :
    k = &H8F1BBCDC      '** -1894007588 in decimal
    Case Else :
    k = &HCA62C1D6      '** -899497514 in decimal
    End Select
    End Function
    Function pad (message As String) As Variant
    Dim l As Integer, n As Integer, i As Integer

    l = Len(message)
    n = (((l+8) \ 64) + 1)*16

    Redim m(0 To n-1) As Long

    For i = 0 To l-1
    m(i\4) = m(i\4) Or lshift(Asc(Mid(message, i+1, 1)), (24 - (i Mod 4) * 8))
    Next

    m(l\4) = m(l\4) Or lshift(Clng(128), (24 - (l Mod 4) * 8))
    m(n-1) = l * 8

    pad = m
    End Function
    Function sha1 (message As String) As String
    Dim h0 As Long, h1 As Long, h2 As Long, h3 As Long, h4 As Long
    Dim a As Long, b As Long, c As Long, d As Long, e As Long
    Dim temp As Long
    Dim l As Integer, n As Integer
    Dim m As Variant
    Dim block As Integer, t As Long
    Dim w(0 To 79) As Long

    l = Len(message)
    n = (((l+8) \ 64) + 1)*16
    m = pad(message)

    h0 = &H67452301     '** 1732584193 in decimal
    h1 = &HEFCDAB89 '** -271733879 in decimal
    h2 = &H98BADCFE '** -1732584194 in decimal
    h3 = &H10325476     '** 271733878 in decimal
    h4 = &HC3D2E1F0 '** -1009589776 in decimal

    For block = 0 To n-1 Step 16
    a = h0
    b = h1
    c = h2
    d = h3
    e = h4

    For t = 0 To 79
    If t < 16 Then
    w(t) = m(block + t)
    Else
    w(t) = rol(w(t-3) Xor w(t-8) Xor w(t-14) Xor w(t-16),1)
    End If
    temp = add32(rol(a,5), add32(f(b,c,d,t), add32(e, add32(w(t),k(t)))))
    e = d
    d = c
    c = rol(b,30)
    b = a
    a = temp
    Next

    h0 = add32(h0, a)
    h1 = add32(h1, b)
    h2 = add32(h2, c)
    h3 = add32(h3, d)
    h4 = add32(h4, e)
    Next

    sha1 = Lcase(tohex(h0) & tohex(h1) & tohex(h2) & tohex(h3) & tohex(h4))
    End Function
    Можно посмотреть и CRC32.. на форуме тоже где то разбиралось через мост LS2J
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
  5. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Код (Text):
    ну вот... опять велики пошли
    Велики, ни Велики - но руль поворачивается и педали крутятся ;)
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    не... ну для курсовой, наверное, интересно самому сгондыбать реализацию хэширования, на подвернувшемся под руку языке ;)
    а вот над подобным стоит задуматься: http://habrahabr.ru/blogs/algorithm/91605/
    особенно над ошибками грамотных программистов http://googleresearch.blogspot.com/2006/06...-it-nearly.html
    и перестать заниматься самодеятельностью там, где уже существуют стандартные подходы и интерфейсы

    вспомним ещё - как МС реализовывала выбор браузеров - ваще детский сад (публично обделались)
     
  7. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Расскажите-расскажите)(в отдельной теме офк))
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    http://soft.compulenta.ru/510956/
    это напрямую относится к "изобретению великов", кот. грешат многие ;)
    но для МС - это просто смех (хотя... учитывая непрерываемые потоки патчей винды - уже не смешно)
     
  9. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Ух ты! Это оказывается патчи... А я то думал, что они просто связь со своими серверами так тестируют
     
  10. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    А как вам хэширование-то поможет? Оно здесь вроде как ни к месту.
    Очевидно, что если внешняя БД требует для аутентификации логин-пароль, то невозможно подключица к ней с клиента, не передав клиенту этот пароль. Однако внешняя БД может поддерживать другие протоколы аутентификации. При использовании например kerberos - пароли вообще не передаются по сети. Грубо говоря, сервер(зная пароль) создает сессию к внешнему серверу и отдает эту сессию клиенту.
    Если не хочеца передавать пароль клиенту - подключайтесь к внешней БД серверным агентом.
    Если ну очень хочется конектица именно с клиента - скройте ls код. В качестве полумеры может проканать.
     
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Можно хранить логин/пароль в полях профильного документа, закрытого readers-полем от пользователей и доступного только серверу и администратору. Агента запускать на сервере.
     
  12. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.291
    Симпатии:
    0
    Вот-вот!
    Если к внешней БД подрубаемся через родной лотусовый АПИ (LSX и др.), то при коннекте ему надо предъявлять пароль, а не его хеш.
    Правильный путь (IMHO) - хранить паролЯ в шифрованном поле
     
Загрузка...

Поделиться этой страницей