1 Шифрование и дайджесты сообщений
Криптография для «чайников»
Симметричное шифрование (AES)
Шифрование с открытым ключом (RSA)
Создание дайджестов (хешей) сообщений
Параметризованный алгоритм (javax.crypto.Cipher)
Входное сообщение (InputStream)
Выходное сообщение (OutputStream)
// Cipher.ENCRYPT_MODE или Cipher.DECRYPT_MODE int mode = . . . Key key = . . .
Cipher cipher = Cipher . getInstance ("AES" ) ; cipher . i n i t (mode , key ) ;
InputStream in = . . .
OutputStream out = . . .
Подготовка буферов для блоков данных int b l o c k s i z e = cipher . getBlockSize ( ) ; int outputsize = cipher . getOutputSize ( b l o c k s i z e ) ;
byte [ ] inBytes = new byte [ b l o c k s i z e ] ; byte [ ] outBytes = new byte [ outputsize ] ;
i n t inLength = 0; while ( true ) { inLength = in . read ( inBytes ) ;
i f ( inLength < b l o c k s i z e ) break ;
out . write ( outBytes , 0 , outLength ) ;
}
i f ( inLength > 0) outBytes = cipher . doFinal ( inBytes , 0 , inLength ) ; else outBytes = cipher . doFinal ( ) ; out . write ( outBytes ) ;
1 Шифрование и дайджесты сообщений
Криптография для «чайников»
Симметричное шифрование (AES)
Шифрование с открытым ключом (RSA)
Создание дайджестов (хешей) сообщений
1 Алиса: создание симметричного ключа и шифрование сообщения (AES)
2 Алиса: шифрование симметричного ключа открытым ключом Боба (RSA)
3
4 Боб: дешифрование симметричного ключа закрытым ключом (RSA)
5 Боб: дешифрование сообщения (AES)
Cipher cipher = Cipher . getInstance ("RSA" ) ; cipher . i n i t ( Cipher .WRAP_MODE, publicKey ) ;
byte [ ] wrappedKey = cipher . wrap (AESKey ) ;
DataOutputStream os = new DataOutputStream ( out ) ; os . w r i t e I n t ( wrappedKey . length ) ; os . write ( wrappedKey ) ;
DataInputStream i s = new DataInputStream ( in ) ; int length = i s . readInt ( ) ;
byte [ ] wrappedKey = new byte [ length ] ;
in . read ( wrappedKey ) ;
Cipher cipher = Cipher . getInstance ("RSA" ) ; cipher . i n i t ( Cipher .UNWRAP_MODE, privateKey ) ;
Key AESKey = cipher . unwrap ( wrappedKey , "AES" ,
Cipher .SECRET_KEY) ;
1 Шифрование и дайджесты сообщений
Криптография для «чайников»
Симметричное шифрование (AES)
Шифрование с открытым ключом (RSA)
MD5
MessageDigest alg =
MessageDigest . getInstance ("SHA−1" ) ;
InputStream in = new FileInputStream ("message . txt " ) ; int ch ; while (( ch=in . read ()) != −1) alg . update (( byte ) ch ) ;
byte [ ] hash = alg . d i g e st ( ) ;
for ( byte b : hash )
System . out . p r i n t f ("%02x " , 0xFF & b ) ;
e7 7f ac 66 c0 9c f7 55 d0 20 9a 4b 45 d4 78 d6 10 2e 11 73
MessageDigest alg =
MessageDigest . getInstance ("SHA−1" ) ;
String msg = "Это послание студентам кафедры ИВЭ!" ; alg . update (msg . getBytes ( ) ) ; byte [ ] hash = alg . d i g e st ( ) ;
for ( byte b : hash )
System . out . p r i n t f ("%02x " , 0xFF & b ) ;
97 0e a2 8b 5f b1 e6 72 37 16 41 77 9b 7c 5a 8b d2 6f c0 f0
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.