Статьи

Простое шифрование в Java и Python с помощью Keyczar


Вам нужно зашифровать небольшие текстовые данные, такие как серийные номера или номера клиентов в вашем веб-приложении?
Учитывая объем данных, передаваемых в Интернете, и растущую потребность в защите клиентов от кражи личных данных, шифрование является единственным и единственным выбором для обеспечения безопасности клиентов. К сожалению, внедрение шифрования является сложной задачей, и это часто приводит к дырам в безопасности. Как и большинство разработчиков, мы стремимся защитить наших клиентов, и всегда оставаться на вершине новейших методов шифрования — это работа на полный рабочий день.

Если вы думали о добавлении шифрования в свое приложение, есть отличный инструмент, который сделает вашу жизнь намного проще: Keyczar .

Keyczar — еще один замечательный инструмент с открытым исходным кодом, появившийся в последнее время в Google, и он стремится обеспечить все преимущества шифрования без головной боли. Keyczar стремится выполнять большую часть основной работы и позволяет вам, разработчику приложений, делать то, что вы делаете лучше всего: разрабатывать. Некоторые из особенностей инструментария (прямо с сайта):

  • Простой API
  • Поворот ключа и управление версиями
  • Безопасные стандартные алгоритмы, режимы и длины клавиш
  • Автоматическая генерация векторов инициализации и сигнатур зашифрованного текста
  • Java и Python реализации (C ++ скоро)
  • Международная поддержка в Java (скоро появится Python)

Пример кода Java на веб-сайте довольно прост и требует всего 2 строки кода:

	Crypter crypter = new Crypter("/path/to/your/keys");
String ciphertext = crypter.encrypt("Secret message");

Вы можете получить совместимую библиотеку Java 6 от здесь , или совместимой библиотеки Java 5 из здесь , и могут начать рыть через Javadocs если вы хотите здесь . Если у вас есть возможность опробовать библиотеку, дайте нам знать, что вы думаете.

Чтобы приступить к включению вышеуказанных строк в ваше Java-приложение, вам нужно выполнить пару шагов настройки. В этом примере мы создадим установку, которая шифрует строки на основе симметричного шифра. Это означает, что есть ключ для шифрования и дешифрования конкретного сообщения.

Сначала загрузите версию keyczar05b, которая соответствует вашей текущей установке Java (1.5 или 1.6), с веб-сайта Keyczar здесь . Вам также потребуется захватить GSON и LOG4J, чтобы выполнить требования, перечисленные на странице Зависимости Java.

When you unzip the GSON and LOG4J packages, locate their respective jar and place them both in the same directory as the keyczar05b-1.x.jar. From this point on, this example assumes $(dir) is the location of all the required files.

Open up a terminal, go to your $dir directory and setup the classpath (NOTE: Line breaks are put in place for readability, please type the following command all on a single line):

export CLASSPATH="$(dir)/keyczar05b-1.5.jar:
$(dir)/gson-1.1.1.jar:
$(dir)/log4j-1.2.15.jar

Then create a directory to store your keys, and make the key set:

mkdir $(dir)/keys
java -cp $CLASSPATH org.keyczar.KeyczarTool create
--location=$(dir)/keys/
--purpose=crypt
--name=Keyset

Then you need to make a primary key:

java -cp $CLASSPATH org.keyczar.KeyczarTool addkey
--location=$(dir)/keys/ --status=primary

At this point you now have a symmetric key to use to encrypt small text blobs (like customer ids!!). Here is a sample java class that will encrypt “Hello World”, based on the key I just set up, and print it out:

import java.lang.*;
import org.keyczar.*;
 
public class SampleEncrypter {
public static void main(String args[])
{
 
//grab command line arguments, and spit out error if not used right
if ( args.length != 1 ) {
System.err.println ("usage: java SampleEncrypter [keydirectory]");
return;
}
Crypter crypter;
try{
crypter = new Crypter(args[0]);
String ciphertext = crypter.encrypt("Hello World");
System.out.println("Cyphered Phrase: \n"+ciphertext+"\n");
}
catch(Exception e){
System.out.println("Something bad happened");
System.out.println(e.toString());
}
}

Output:

bash-3.2$ javac -cp $CLASSPATH sampleencrypter.java
bash-3.2$ java -cp $CLASSPATH:$(dir) sampleencrypter keys
Cyphered Phrase:
AV_GuyDgAXgGKS6oeFH5MiaARyG3fXY4_RSRinpSrzITj9wXQdhdX7ozMM9RiXNYfdpAkD_xLKtv

There is more information about setting up different key types in the PDF they have listed on the website, but this should at least get you going using a symmetric key!