Проблема в получении расшифрованных данных - PullRequest
2 голосов
/ 06 июля 2010

Я работаю над программой шифрования-дешифрования.Программа получает данные от пользователя и шифрует их.Затем он сохраняет зашифрованные данные в таблице базы данных MS Access.Позже данные извлекаются из таблицы, расшифровываются и возвращаются пользователю.

Я сохраняю данные в виде текста в ms доступ.Алгоритм шифрования возвращает байтовый массив размером 16. Но когда я получаю данные из базы данных, я получаю только байтовый массив размером 8.Помоги мне пройти через это ...

Ответы [ 3 ]

2 голосов
/ 06 июля 2010

Мне кажется, проблема в том, что вы используете его как текст, а это не так (это двоичные данные).Половина длины звучит как проблема, связанная с Unicode (т. Е. «Текст» хранится в ширину с двумя байтами для символа, но извлекается как один байт на символ).

0 голосов
/ 07 июля 2010

У меня есть приложение, которое хранит зашифрованные номера кредитных карт с помощью интерфейса MS Crypto. Я получил код из базы знаний MS, и самое главное - выполнить преобразования ByteToString () и StringToByte () в нужных местах. Я храню фактические данные в простом текстовом поле Jet и у меня не было никаких проблем.

0 голосов
/ 06 июля 2010

Одним из возможных решений является кодирование зашифрованного текста в виде строки с использованием Base64 кодировка

вы можете использовать библиотеку Appache Commons для этого: http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

Отредактировано : Я не знаю, почему вы хотите MS-ACCESS Специальное решение! DMBS может измениться, ОС также может измениться. Вы должны написать общее решение, которое может работать во многих случаях.

Вот небольшой пример использования Base64 Encoder / Decoder:

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder; 

import java.io.IOException ;

public class Decoder {
    public static void main(String[] args) throws IOException{
        byte[] cipherBytes = "stackoverflow".getBytes();    // say this the is encrypted bytes

        String encodedBytes = new BASE64Encoder().encode(cipherBytes);
        System.out.println("stored as: " + encodedBytes );

        byte[] decodedBytes = new BASE64Decoder().decodeBuffer(encodedBytes); 
        System.out.println("extracted as: " + new String(decodedBytes) );
    }
}

Примечание: этот код использует внутренние классы солнца (BASE64Encoder / Decoder) и не рекомендуется использовать эти классы в вашей программе, поскольку он может измениться в следующей версии JDK.

лучше использовать BASE64 Encoder / Decoder в Appache Commons.

Если вы хотите решение MS-ACCESS, попробуйте сохранить зашифрованный текст в LONGBINARY, смотрите это: Как указать тип BLOB-объектов в MS Access?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...