1. Как использовать.
Чтобы работать с Bouncy Castle из своего проекта, вы должны аккуратно скопировать в корень своего мобильного приложения папку бибилотеки, не изменяя её внутреннюю файловую структуру. Проще говоря - копируйте папку
org в папку
src проекта). Хочется обратить внимание на то, что мы делаем мобильное приложение и поэтому размер имеет значение - чем меньше используем классов тем лучше. Практически всегда используется содержимое папок:
- ...\src\org\bouncycastle\util\ - различные вспомогательные типы данных (к примеру числа BigIntegers - нужны для генерации псевдослучайных чисел).
- ...\src\org\bouncycastle\math\ - здесь всё понятно и без слов - шифрование без математики - никак)).
2. Небольшие примеры использования.
2.1 Хеш MD5:
public static String MD5_EncodeHEX(String data) {
MD5Digest dig = new MD5Digest();
byte[] bytes = data.getBytes();
dig.update(bytes, 0, bytes.length);
byte[] md5 = new byte[dig.getDigestSize()];
dig.doFinal(md5, 0);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < md5.length; i++) {
byte aMessageDigest = s[i];
String hex = Integer.toHexString(0xff & aMessageDigest);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
2.2 Шифрование данных на основе пароля потоковым алгоритмом шифрования RC4:
public static String CryptData(byte[] key, byte[] source) {
if (source.length == 0) {
return new String("");
}
String r = "";
try {
RC4Engine e_rc4 = new RC4Engine();
KeyParameter kp = new KeyParameter(MD5_EncodeHEX(new String(key)).getBytes(), 0, 10);
e_rc4.init(true, kp);
byte e_rez[] = new byte[source.length];
e_rc4.processBytes(source, 0, source.length, e_rez, 0);
r = new String(Base64.encode(e_rez));
e_rc4.reset();
} catch (Exception e) {
r = "";
}
return r;
}
2.3 Дешифрование данных на основе пароля потоковым алгоритмом шифрования RC4:
public static String DecryptData(byte[] key, byte[] csource) {
if (csource.length == 0) {
return new String("");
}
String r = "";
try {
RC4Engine e_rc4 = new RC4Engine();
KeyParameter kp = new KeyParameter(MD5_encodeHEX(new String(key)).getBytes(), 0, 10);
e_rc4.init(false, kp);
byte[] isx = Base64.decode(csource);
byte e_rez[] = new byte[isx.length];
e_rc4.processBytes(isx, 0, isx.length, e_rez, 0);
r = new String(e_rez);
e_rc4.reset();
} catch (Exception e) {
r = "";
}
return r;
}
Комментарий к коду.
Как видим представлено лишь самое начало использования криптобиблиотеки. Примеры использования по каждому классу имеются уже в исходниках. Спектр использования очень широк:
- Хеширование значений различнми алгоритмами.
- Симметричное и ассиметричное шифрование различными алгоритмами.
- Цифровые подписи, сертификаты.
- Преобразование данных (к примеру даже: Base64).
- И так далее...
В следующий частях блога по данной библиотеке рассмотрим такую интересную тему, как генерация RSA ключей, совместимых с форматом представления в MSDN.