· 7 years ago · Jun 28, 2018, 02:52 PM
1import javax.crypto.*;
2
3import java.io.*;
4
5import java.security.InvalidKeyException;
6
7import java.security.NoSuchAlgorithmException;
8
9public class DES {
10
11 Cipher ecipher; //ОбЪект Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
12 Cipher dcipher; //ОбЪект Ð´Ð»Ñ Ð´ÐµÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ
13
14 /**
15 * КонÑтруктор
16 *
17 * @param key Ñекретный ключ алгоритма DES. ÐкземплÑÑ€ клаÑÑа SecretKey
18 * @throws NoSuchAlgorithmException
19 * @throws NoSuchPaddingException
20 * @throws InvalidKeyException
21 */
22 public DES(SecretKey key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
23 ecipher = Cipher.getInstance("DES"); //Создаём обЪект ecipher, параметр "DES" - Ð¸Ð¼Ñ ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого алгоритма шифрованиÑ
24 dcipher = Cipher.getInstance("DES"); //Создаём обЪект dcipher, параметр "DES" - Ð¸Ð¼Ñ ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого алгоритма шифрованиÑ
25 ecipher.init(Cipher.ENCRYPT_MODE, key); //Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÑкземплÑра клаÑÑа и указание, в каком режиме он будет работать. ENCRYPT_MODE - шифрование
26 dcipher.init(Cipher.DECRYPT_MODE, key); //Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÑкземплÑра клаÑÑа и указание, в каком режиме он будет работать. DECRYPT_MODE - шифрование
27 }
28
29 /**
30 * Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð½Ð°Ð¸Ñ
31 *
32 * @param str Ñтрока открытого текÑта
33 * @return Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñтрока в формате Base64
34 */
35 private String encrypt(String str) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException {
36 byte[] utf8 = str.getBytes("UTF8");
37 byte[] enc = ecipher.doFinal(utf8);
38 return new sun.misc.BASE64Encoder().encode(enc);
39 }
40
41 /**
42 * Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€Ð°ÑшифрованиÑ
43 *
44 * @param str Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñтрока в формате Base64
45 * @return раÑÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñтрока
46 */
47 private String decrypt(String str) throws IOException, IllegalBlockSizeException, BadPaddingException {
48 byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
49 byte[] utf8 = dcipher.doFinal(dec);
50 return new String(utf8, "UTF8");
51 }
52
53 /**
54 * Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ правильноÑти работы клаÑÑа
55 */
56 public static void main(String[] args) throws IllegalBlockSizeException, BadPaddingException, IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
57 SecretKey key = null;
58
59 key = KeyGenerator.getInstance("DES").generateKey(); //Ñоздаём ключ
60
61 DES crypter = new DES(key);
62
63 String OStr1 = "Ñтрока Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸"; //Строка Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ/дешифрованиÑ
64 String SStr = crypter.encrypt(OStr1); //Зашифровать Ñтроку
65 String OStr2 = crypter.decrypt(SStr); //РаÑшифровать Ñтроку
66
67 System.out.println("Строка:" + OStr1 + "nПоÑле шифрованиÑ: " + SStr + "nПоÑле дешифрованиÑ: " + OStr2);
68 }
69}
70
71public static void main(String[] args) throws IllegalBlockSizeException, BadPaddingException, IOException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
72 SecretKey key = null;
73
74 key = KeyGenerator.getInstance("DES").generateKey(); //Ñоздаём ключ
75
76 DES crypter = new DES(key);
77
78 String OStr1 = "PjQWKIqavcor+7nvyFz5SKK9lDAz3c8f1owTE73Ms+fKYKeOkik99g=="; //"Ñтрока Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸"
79 String OStr2 = crypter.decrypt(OStr1); //РаÑшифровать Ñтроку
80
81 System.out.println(OStr2);
82
83 /* Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
84at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:989)
85at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
86at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314)
87at javax.crypto.Cipher.doFinal(Cipher.java:2165)
88at crypt.DES.decrypt(DES.java:51)
89at crypt.DES.main(DES.java:66) */
90}
91
92Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");