Country not specified
Unknown website Share

Apps4all

Страна: -
Город: -
Был онлайн: -
О себе:
 
08-07-2016, 11:04
Apps4all

Образец кода: приложение по шифрованию данных

Кристофер Бёрд, специалист по разработке программного обеспечения

Первоисточник приложения:
Intel SSG

Введение

Шифрование является крайне важным, поскольку оно позволяет вам надежно защищать данные от доступа третьих лиц. Шифрование остается актуальной темой для рассуждений в сообществе по безопасности. Мобильные устройства хранят как никогда много ценной информации, поэтому шифрование становится жизненно важным аспектом в обеспечении информационной безопасности.

Эта статья представляет API по шифрованию данных, доступные на Java или OpenSSL. Оба решения работают на Android OS.

Мы рекомендуем испытать одну из опций и скомпилировать код по мере прочтения материала. 

548f01a084a893.60949580.jpg

Код шифрования данных с пояснениями 

Если вы хотите зашифровать данные на Android, существует два решения: Java Crypto API и OpenSSL API. Мы покажем вам, как зашифровать данные при помощи обоих.

Java Crypto API

Работать с Java Crypto API под Android очень просто. Для использования Java Crypto API на Android первым делом вам нужно сгенерировать ключ для шифрования. Специальный класс KeyGenerator в пакете javax.crypto сделает это за вас.

1 mKey = null;
2 try { 
3 kgen = KeyGenerator.getInstance("AES");
4 mKey = kgen.generateKey();
5
6 } catch (NoSuchAlgorithmException e) {
7 e.printStackTrace();
8 }

Затем вы можете использовать сгенерированный ключ для шифрования файла данных. Это можно сделать, передавая порции данных на AES Cipher, созданного javax.crypto.

01 // open stream to read origFilepath. We are going to save encrypted contents to outfile
02 InputStream fis = new FileInputStream(origFilepath);
03 File outfile = new File(encFilepath);
04 int read = 0;
05 if (!outfile.exists())
06 outfile.createNewFile();
07
08 FileOutputStream encfos = new FileOutputStream(outfile);
09 // Create Cipher using "AES" provider
10 Cipher encipher = Cipher.getInstance("AES");
11 encipher.init(Cipher.ENCRYPT_MODE, mKey);
12 CipherOutputStream cos = new CipherOutputStream(encfos, encipher);
13
14 // capture time it takes to encrypt file
15 start = System.nanoTime();
16 Log.d(TAG, String.valueOf(start));
17
18 byte[] block = new byte[mBlocksize];
19
20 while ((read = fis.read(block,0,mBlocksize)) != -1) {
21 cos.write(block,0, read);
22 }
23 cos.close();
24 stop = System.nanoTime();
25
26 Log.d(TAG, String.valueOf(stop));
27 seconds = (stop - start) / 1000000;// for milliseconds
28 Log.d(TAG, String.valueOf(seconds));
29
30 fis.close();

OpenSSL API

Шифрование данных в OpenSSL на Android требует создания нативного C-кода, доступ к которому можно получить из Java путем вызовов JNI. Это потребует от вас больше работы, но в результате вы получите лучшую производительность.

Сначала давайте сгенерируем ключ и iv.

01 unsigned char cKeyBuffer[KEYSIZE/sizeof(unsigned char)];
02 unsigned char iv[] = "01234567890123456";
03 int opensslIsSeeded = 0;
04 if (!opensslIsSeeded) {
05 if (!RAND_load_file("/dev/urandom", seedbytes)) {
06 return -1;
07 }
08 opensslIsSeeded = 1;
09 }
10
11 if (!RAND_bytes((unsigned char *)cKeyBuffer, KEYSIZE )) {
12 }

Теперь мы можем использовать сгенерированный ключ (cKeyBuffer) для зашифровки файла. Инициализируйте EVP с помощью вашего ключа и iv. Далее передайте порцию данных функции EVP_EncryptUpdate. Последняя часть данных из файла должна быть передана функции EVP_EncryptFinal_ex.

01 if (!(EVP_EncryptInit_ex(e_ctx, EVP_aes_256_cbc(), NULL, cKeyBuffer, iv ))) {
02 ret = -1;
03 printf( "ERROR: EVP_ENCRYPTINIT_EXn");
04 }
05
06 // go through file, and encrypt
07 if ( orig_file != NULL ) {
08 origData = new unsigned char[aes_blocksize];
09 encData = new unsigned char[aes_blocksize+EVP_CIPHER_CTX_block_size(e_ctx)]; // potential for encryption to be
16 bytes longer than original
10
11 printf( "Encoding file: %sn", filename);
12
13 bytesread = fread(origData, 1, aes_blocksize, orig_file);
14 // read bytes from file, then send to cipher
15 while ( bytesread ) {
16
17
18 if (!(EVP_EncryptUpdate(e_ctx, encData, &len, origData, bytesread))) {
19 ret = -1;
20 printf( "ERROR: EVP_ENCRYPTUPDATEn");
21 }
22 encData_len = len;
23
24 fwrite(encData, 1, encData_len, enc_file );
25 // read more bytes
26 bytesread = fread(origData, 1, aes_blocksize, orig_file);
27 }
28 // last step encryption
29 if (!(EVP_EncryptFinal_ex(e_ctx, encData, &len))) {
30 ret = -1;
31 printf( "ERROR: EVP_ENCRYPTFINAL_EXn");
32 }
33 encData_len = len;
34
35 fwrite(encData, 1, encData_len, enc_file );
36
37 // free cipher
38 EVP_CIPHER_CTX_free(e_ctx);

Заключение

Реализуя код на примере этой статьи, вы сможете быстро научиться использовать оба решения Java Crypto API и OpenSSL API для шифрования данных на Android-платформах на базе процессоров Intel®.

Об авторе

Кристофер Бёрд является членом Intel Software and Solutions Group (SSG), подразделения Developer Relations и команды Intel® Atom™ Processor Innovative Technologies Engineering.

Статьи и информация по теме:

Предупреждение

ИНФОРМАЦИЯ В ЭТОМ ДОКУМЕНТЕ ПРЕДОСТАВЛЯЕТСЯ В ОТНОШЕНИИ ПРОДУКТОВ INTEL. ЛИЦЕНЗИЯ, ЯВНАЯ ИЛИ ПОДРАЗУМЕВАЕМАЯ, ПРЕДУСМОТРЕННАЯ ПРОЦЕССУАЛЬНЫМ ПОРЯДКОМ ИЛИ ИНЫМ СПОСОБОМ, НА ЛЮБЫЕ ПРАВА НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ НЕ ПРЕДОСТАВЛЯЮТСЯ ЭТИМ ДОКУМЕНТОМ. ЗА ИСКЛЮЧЕНИЕМ СЛУЧАЕВ, ПРЕДУСМОТРЕННЫХ УСЛОВИЯМИ И СРОКАМИ INTEL ПО ПРОДАЖЕ ПОДОБНЫХ ПРОДУКТОВ, INTEL НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ И ОТКАЗЫВАЕТСЯ ОТ ЛЮБЫХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ В ОТНОШЕНИИ ПРОДАЖИ И/ИЛИ ИСПОЛЬЗОВАНИЯ ПРОДУКТОВ INTEL, ВКЛЮЧАЯ ОБЯЗАТЕЛЬСТВА ИЛИ ГАРАНТИИ, ОТНОСЯЩИЕСЯ К ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ЛИКВИДНОСТИ, ИЛИ НАРУШЕНИЯ КАКИХ-ЛИБО ПАТЕНТОВ, АВТОРСКИХ ПРАВ ИЛИ ИНЫХ ПРАВ ИНТЕЛЛЕКТУАЛЬНОЙ СОБСТВЕННОСТИ.
ЕСЛИ ИНОЕ НЕ СОГЛАСОВАНО КОМПАНИЕЙ INTEL В ПИСЬМЕННОЙ ФОРМЕ, ПРОДУКТЫ INTEL НЕ ПРЕДНАЗНАЧЕНЫ ДЛЯ ЛЮБОГО ИСПОЛЬЗОВАНИЯ, КОТОРОЕ ПРИ НАЛИЧИИ СБОЯ В РАБОТЕ ПРОДУКТА INTEL МОЖЕТ СПРОВОЦИРОВАТЬ ТРАВМИРОВАНИЕ И СМЕРТЕЛЬНЫЙ ИСХОД.

Intel может вносить изменения в спецификации и описания продукции в любое время без уведомления. Проектировщики не должны полагаться на отсутствие или наличие характеристик каких-либо объектов или инструкций с пометками "зарезервировано" или "не определено". Intel сохраняет их для дальнейшего определения и не несет никакой ответственности за конфликты или несовместимость, которые могут возникнуть от будущих изменений. Приведенные здесь сведения могут быть изменены без предварительного уведомления. Не финализируйте проект на базе этой информации.

Продукты, описанные в этом документе, могут содержать конструктивные недостатки или ошибки, которые могут вызвать отклонения в работе продукта от опубликованных спецификаций. Сведения о выявленных недостатках доступны по запросу.

Свяжитесь с вашим локальным офисом продаж Intel или обратитесь к своему дистрибьютору, чтобы получить последние версии спецификаций, а также перед размещением заказа.

Копии документов, имеющих порядковый номер и на которые ссылается данный документ, а также иные материалы Intel можно получить, позвонив по тел. 1-800-548-4725 или на сайте: http://www.intel.com/design/literature.htm

Программное обеспечение и рабочая нагрузка, используемые в тестах производительности, могли быть оптимизированы для обеспечения высокой производительности только на микропроцессорах Intel. Тесты производительности, такие как SYSmark* и MobileMark*, проводятся с использованием конкретных компьютерных систем, компонентов, программного обеспечения, операций и функций. Любое изменение любого из этих факторов может привести к варьированию результатов. Вам стоит обратиться к другим источникам информации и тестам производительности для содействия в оценке принятия решения о покупке, включая аспект производительности этого продукта в совместной работе с другими продуктами.

Любой программный исходный код, использованный в настоящем документе, поставляется по лицензии и может быть задействован или скопирован только в соответствии с условиями этой лицензии.

Intel, логотип Intel и Atom являются товарными знаками Корпорации Intel в США и/или других странах.

Copyright © 2014 Корпорации Intel. Все права защищены.

*Другие наименования и торговые марки могут быть собственностью других людей.

 
Intel
разработчикам
разработка
0 0 0

Чтобы оставлять комментарии вам необходимо зарегистрироваться