crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> криптография, скажем нет изобретению велосипедов!
kilkinenator
  опции профиля:
сообщение 17.6.2010, 16:10
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 11.2.2010
Пользователь №: 1464

Спасибо сказали: 3 раз(а)




Репутация:   1  


итак, появилась у меня необходимость генерировать RSA ключи, и шифровать при помощи RSA и RC5, а также считать хэши MD5. из криптографических библиотек я знаю только openSSL, точнее сказать - слышал про openSSL, а как ее использовать понять не могу.

а вопросы у меня следующие:
- какую библиотеку целесообразнее всего использовать в моих целях, может чтото отличное от openSSL?
- как эту библиотеку использовать в QT проекте?
- ну и конечно же, где найти пару примеров ее использования?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kas
  опции профиля:
сообщение 17.6.2010, 17:18
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 16.6.2010
Пользователь №: 1813

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kilkinenator @ 17.6.2010, 17:10) *
итак, появилась у меня необходимость генерировать RSA ключи, и шифровать при помощи RSA и RC5, а также считать хэши MD5. из криптографических библиотек я знаю только openSSL, точнее сказать - слышал про openSSL, а как ее использовать понять не могу.

а вопросы у меня следующие:
- какую библиотеку целесообразнее всего использовать в моих целях, может чтото отличное от openSSL?
- как эту библиотеку использовать в QT проекте?
- ну и конечно же, где найти пару примеров ее использования?


в Qt есть QSslSocket, который использует openSSL. только Qt должна быть собрана с соответствующим ключом.
а, вообще, что именно тебе нужно сделать при помощи openSSL?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kilkinenator
  опции профиля:
сообщение 17.6.2010, 18:02
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 11.2.2010
Пользователь №: 1464

Спасибо сказали: 3 раз(а)




Репутация:   1  


Цитата(kas @ 17.6.2010, 18:18) *
а, вообще, что именно тебе нужно сделать при помощи openSSL?

в моем посте было написано. еще раз: генерировать ключ RSA. шифровать методом RC5. считать хэш MD5, может еще чтото, но пока что это.

Цитата(kas @ 17.6.2010, 18:18) *
в Qt есть QSslSocket, который использует openSSL. только Qt должна быть собрана с соответствующим ключом


- как я понимаю ключ к configure, можно подробнее? что за ключ?
- после такой сборки можно решить описанные задачи?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kas
  опции профиля:
сообщение 17.6.2010, 18:19
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 16.6.2010
Пользователь №: 1813

Спасибо сказали: 0 раз(а)




Репутация:   0  


вот несколько примеров найденные и сети из журнала системный администратор

Генерация ПСП
Раскрывающийся текст
#include <openssl/rand.h>
void main()
{
int outf;
unsigned char buf[1024];
if(RAND_bytes(buf, sizeof(buf))) { /* 1 succes,
0 otherwise */
outf = open("./rnd_bytes", O_CREAT|O_TRUNC|O_RDWR,
0600);
write(outf, buf, sizeof(buf));
} else printf("-ERR: RAND_bytes\n");
}


Вычисление MD5-хэша для файла большого размера
#include <openssl/md5.h>
#define BUFSIZE (1025*16)
void main(int argc, char **argv)
{
MD5_CTX c; /* контекст хэша */
unsigned char buf[BUFSIZE];
unsigned char md_buf[MD5_DIGEST_LENGTH];
/* В командной строке передается имя файла,
для которого вычисляется хэш */
int inf = open(argv[1], O_RDWR);
/* Инициализируем контекст */
MD5_Init(&c);
/* Вычисляем хэш */
for(;;) {
int i = read(inf, buf, BUFSIZE);
if(i <= 0) break;
MD5_Update(&c, buf, (unsigned long)i);
}
/* Помещаем вычисленный хэш в буфер md_buf */
MD5_Final(md_buf, &c);
/* Отображаем результат */
for(i = 0; i < MD5_DIGEST_LENGTH; i++) ↵
printf("%02x", md_buf[i]);
}

Генерация ключей алгоритма RSA
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
/* Имена ключевых файлов */
#define PRIVAT "./privat.key"
#define PUBLIC "./public.key"
void main()
{
/* указатель на структуру для хранения ключей */
RSA * rsa = NULL;
unsigned long bits = 2048; /* длина ключа в битах */
FILE *priv_key_file = NULL, *pub_key_file = NULL;
/* контекст алгоритма шифрования */
const EVP_CIPHER *cipher = NULL;
priv_key_file = fopen(PRIVAT, "wb");
pub_key_file = fopen(PUBLIC, "wb");
/* Генерируем ключи */
rsa = RSA_generate_key(bits, RSA_F4, NULL, NULL);
/* Формируем контекст алгоритма шифрования */
OpenSSL_add_all_ciphers();
cipher = EVP_get_cipherbyname("bf-ofb");
/* Получаем из структуры rsa открытый и секретный ключи
* и сохраняем в файлах. Секретный ключ шифруем с помощью
* парольной фразы «hello»
*/
PEM_write_RSAPrivateKey(priv_key_file, rsa, cipher, ↵
NULL, 0, NULL, "hello");
PEM_write_RSAPublicKey(pub_key_file, rsa);
/* Освобождаем память, выделенную под структуру rsa */
RSA_free(rsa);
}

Шифрование данных по алгоритму RSA
#include <openssl/rsa.h>
#include <openssl/pem.h>
void main(int argc, char **argv)
{
/* структура для хранения открытого ключа */
RSA * pubKey = NULL;
unsigned char *ptext, *ctext;
FILE * pub_key_file = NULL;
/* Открываем входной и создаем выходной файлы */
int inf = open(argv[1], O_RDWR);
int outf = open("./rsa.file", ↵
O_CREAT|O_TRUNC|O_RDWR, 0600);
/* Считываем открытый ключ */
pub_key_file = fopen(PUBLIC, "rb");
pubKey = PEM_read_RSAPublicKey(pub_key_file, NULL, ↵
NULL, NULL);
/* Определяем длину ключа */
int key_size = RSA_size(pubKey);
ptext = malloc(key_size);
ctext = malloc(key_size);
/* Шифруем содержимое входного файла */
while(1) {
inlen = read(inf, ptext, key_size - 11);
if(inlen <= 0) break;
outlen = RSA_public_encrypt(inlen, ptext, ctext, ↵
pubKey, RSA_PKCS1_PADDING);
if(outlen != RSA_size(pubKey)) exit(-1);
write(outf, ctext, outlen);
}
}


Дешифрование файла, зашифрованного
по RSA-алгоритму
#include <openssl/rsa.h>
#include <openssl/pem.h>
void main(int argc, char **argv)
{
RSA *privKey = NULL;
FILE *priv_key_file;
unsigned char *ptext, *ctext;
/* Открываем входной и создаем выходной файл */
inf = open(argv[1], O_RDWR);
outf = open("./test.rsa", ↵
O_CREAT|O_TRUNC|O_RDWR, 0600);
/* Открываем ключевой файл и считываем секретный ключ */
priv_key_file = fopen(PRIVAT, "rb");
privKey = PEM_read_RSAPrivateKey(priv_key_file, ↵
NULL, NULL, NULL);
/* Определяем размер ключа */
key_size = RSA_size(privKey);
ctext = malloc(key_size);
ptext = malloc(key_size);
/* Дешифруем файл */
while(1) {
inlen = read(inf, ctext, key_size);
if(inlen <= 0) break;
outlen = RSA_private_decrypt(inlen, ctext, ptext, ↵
privKey, RSA_PKCS1_PADDING);
if(outlen < 0) exit(0);
write(outf, ptext, outlen);
}
}


для их использования, естественно, Qt пересобирать не надо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
inviZ
  опции профиля:
сообщение 17.6.2010, 18:22
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.6.2010
Пользователь №: 1781

Спасибо сказали: 4 раз(а)




Репутация:   1  


Цитата(kilkinenator @ 18.6.2010, 0:10) *
а как ее использовать понять не могу.

"Не могу понять", или все-таки "не хочу разбираться, дайте готовый код"/"не понимаю по-английски" и т.п. В чем там могут быть проблемы? У библиотеки достаточно простой интерфейс, все функции описаны в документации. Что еще нужно-то?

Цитата(kilkinenator @ 18.6.2010, 2:02) *
- после такой сборки можно решить описанные задачи?

Нет, это только для SSL-сокетов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kas
  опции профиля:
сообщение 17.6.2010, 18:25
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 16.6.2010
Пользователь №: 1813

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kilkinenator @ 17.6.2010, 19:02) *
как я понимаю ключ к configure, можно подробнее? что за ключ?

ключ к configure -openssl
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.6.2010, 18:50
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


kas, не делай больше таких портянок, справку смотри тут
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 17.6.2010, 20:04
Сообщение #8


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(inviZ @ 17.6.2010, 19:22) *
"Не могу понять", или все-таки "не хочу разбираться, дайте готовый код"/"не понимаю по-английски" и т.п.
М
inviZ, устное предупреждение!
Мне кажется kilkinenator свои вопросы достаточно подробно и доступно описал!
Здесь на форуме у каждого свой уровень подготовки, уважайте собеседника.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 17.6.2010, 21:11
Сообщение #9


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


http://www.cryptopp.com/
библиотека алгоритмов шифрования.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kilkinenator
  опции профиля:
сообщение 18.6.2010, 9:07
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 11.2.2010
Пользователь №: 1464

Спасибо сказали: 3 раз(а)




Репутация:   1  


Цитата(Iron Bug @ 17.6.2010, 22:11) *

интересно. спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 15:39