2010-06-14 2 views
2

Мне нужно создать базу данных Microsoft Access, но в одной из моих таблиц необходимо, чтобы одно поле было сильно зашифровано.AES Шифрование поля Microsoft Access с помощью VBA

Поскольку AES требует как ключа, так и вектора инициализации, я решил решить эту проблему, потребовав пароль для доступа к базе данных (в качестве ключа), и поле в таблице для хранения хэша SHA1 открытый текст зашифрованного поля.

Кто-нибудь знает, где я могу найти VBA-совместимый код, чтобы на самом деле сделать шифрование?

ответ

2

Некоторые альтернативы написанию с нуля;

  • Вы можете сделать это с родной CryptoAPI (корень API является CryptAquireContext)
  • Вы можете использовать Microsoft, CAPICOM, который является COM-обертка в CryptoAPI и supports AES.
  • Вы можете использовать стороннюю библиотеку, то есть от ebCrypt отличная, компактная и бесплатная.
0

База знаний MS обеспечивает VB code for using the CryptoAPI. Обратите внимание, что пример объясняет, как шифровать, но не как расшифровать результаты. Но это довольно легко сделать, поскольку декларация API расшифровки имеет почти одинаковые аргументы. Обратите внимание, однако, что процедура преобразования строк в байты в код примера неправильно разделяет конечные пробелы во время процесса дешифрования, поэтому вам нужно изменить этот код, чтобы исправить это.

+0

Это для Vb.Net. MS Access использует VBA, который является производным VB6 (т. Е. Не. Net) –

1

Используется шифрование RC4. Шифрует и расшифровывает, и вы вызываете его нажатием кнопки или любым событием, которое вы хотите в MS Access. Не уверен, что вы можете использовать его, но это все, что у меня есть. я получил его отсюда: http://bytes.com/topic/access/insights/906671-rc4-encryption-algorithm-vba-vbscript

Функция fRunRC4 (sMessage, strKey) As String Dim Клён, х, у, I, J, темп Dim с (256), к (256)

'Init keystream 
kLen = Len(strKey) 
For i = 0 To 255 
    s(i) = i 
    k(i) = Asc(Mid(strKey, (i Mod kLen) + 1, 1)) 
Next 

j = 0 
For i = 0 To 255 
    j = (j + k(i) + s(i)) Mod 255 
    temp = s(i) 
    s(i) = s(j) 
    s(j) = temp 
Next 

'Drop n bytes from keystream 
x = 0 
y = 0 
For i = 1 To 3072 
    x = (x + 1) Mod 255 
    y = (y + s(x)) Mod 255 
    temp = s(x) 
    s(x) = s(y) 
    s(y) = temp 
Next 

'Encode/Decode 
For i = 1 To Len(sMessage) 
    x = (x + 1) Mod 255 
    y = (y + s(x)) Mod 255 
    temp = s(x) 
    s(x) = s(y) 
    s(y) = temp 

    fRunRC4 = fRunRC4 & Chr(s((s(x) + s(y)) Mod 255) Xor Asc(Mid(sMessage, i, 1))) 
Next 

End Function

+1

Существует также версия VBA AES по указанной ссылке – smirkingman

0

Я прихожу на этот вопрос очень поздно, но если вы готовы рассмотреть решение третьей стороны, Netlib Encryptionizer Платформа позволяет прозрачно шифровать данные для почти любой ОС Windows-приложение, или службы, включая MS Access: http://www.netlib.com/file-encryption.asp

 Смежные вопросы

  • Нет связанных вопросов^_^