1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jianggujin-JCodec

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Часть 1. Введение

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

Часть 2. Начало использования

Использовать JCodec можно, загрузив исходный код и скомпилировав его самостоятельно или скачав уже скомпилированный jar-файл. Если вы используете maven для сборки проекта, то можете добавить координаты JCodec в pom.xml:

<!-- http://mvnrepository.com/artifact/com.jianggujin/JCodec -->
<dependency>
    <groupId>com.jianggujin</groupId>
    <artifactId>JCodec</artifactId>
    <version>последняя версия</version>
</dependency>

Последнюю версию можно получить из Maven репозитория или с Code Cloud.

2.1 Base64

package com.jianggujin.codec.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.junit.Test;
import com.jianggujin.codec.JBase64;
import com.jianggujin.codec.JBase64.JDecoder;
import com.jianggujin.codec.JBase64.JEncoder;

public class Base64Test {
   String str = "jianggujin";
   File file = new File(getClass().getSimpleName() + ".dat");

   @Test
   public void test() throws IOException {
      JEncoder encoder = JBase64.getEncoder();
      JDecoder decoder = JBase64.getDecoder();
      System.out.println("Исходная строка: " + str);
      String encode = encoder.encodeToString(str.getBytes(), "UTF-8");
      System.out.println("Кодированная строка: " + encode);
      System.out.println("Декодированная строка: " + new String(decoder.decode(encode, "UTF-8")));
      System.out.print("Путь выходного потока: " + file.getAbsolutePath());
      OutputStream out = encoder.wrap(new FileOutputStream(file));
      out.write(str.getBytes());
      out.flush();
      out.close();
      System.out.println();
      System.out.print("Путь входного потока: ");
      InputStream in = decoder.wrap(new FileInputStream(file));
      byte[] buffer = new byte[1024];
      int len = in.read(buffer);
      System.out.println(new String(buffer, 0, len));
   }
}

2.2 Caesar (шифр Цезаря)

package com.jianggujin.codec.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.junit.Test;
import com.jianggujin.codec.JCaesar;

public class CaesarTest {
   String str = "jianggujin";
   File file = new File(getClass().getSimpleName() + ".dat");
   int k = 10;

   @Test
   public void test() throws IOException {
      System.out.println("Исходная строка: " + str + ", смещение: " + k);
      String encrypt = JCaesar.encrypt(str, k);
      System.out.println("Зашифрованная строка: " + encrypt);
      System.out.println("Расшифрованная строка: " + JCaesar.decrypt(encrypt, k));
      System.out.print("Путь выходного потока шифрования: " + file.getAbsolutePath());
      OutputStream out = JCaesar.wrap(new FileOutputStream(file), k);
      out.write(str.getBytes());
      out.flush();
      System.out.println();
      System.out.print("Путь входного потока расшифровки: ");
      InputStream in = JCaesar.wrap(new FileInputStream(file), k);
      byte[] buffer = new byte[1024];
      int len = in.read(buffer);
      System.out.println(new String(buffer, 0, len));
   }
}

2.3 CRC32 (циклический избыточный код)

package com.jianggujin.codec.test;

import java.io.IOException;
import org.junit.Test;
import com.jianggujin.codec.JCRC32;

public class CRC32Test {
   String str = "jianggujin";

   @Test
   public void test() throws IOException {
      System.out.println("Исходная строка: " + str);
      System.out.println("CRC32: " + JCRC32.encode(str.getBytes()));
   }
}

2.4 MessageDigest (алгоритм дайджеста сообщений)

package com.jianggujin.codec.test;

import org.junit.Test;

import com.jianggujin.codec.JHex;
import com.jianggujin.codec.JMessageDigest;
import com.jianggujin.codec.JMessageDigest.JMessageDigestAlgorithm;

public class MessageDigestTest {
   String str = "jianggujin";

   @Test
   public void test() throws Exception {
      System.out.println("Исходная строка: " + str);
      for (JMessageDigestAlgorithm algorithm : JMessageDigestAlgorithm.values()) {
         System.out.println("-----------------------------------------");
         System.out.println("Алгоритм: " +
``` **2.5 Mac (Сообщение с кодом аутентификации)**

```java
package com.jianggujin.codec.test;

import org.junit.Test;

import com.jianggujin.codec.JBase64;
import com.jianggujin.codec.JBase64.JEncoder;
import com.jianggujin.codec.JHex;
import com.jianggujin.codec.JMac;
import com.jianggujin.codec.JMac.JMacAlgorithm;

public class MacTest {
   String str = "jianggujin";

   @Test
   public void test() throws Exception {
      System.out.println("Исходная строка: " + str);
      JEncoder encoder = JBase64.getEncoder();
      for (JMacAlgorithm algorithm : JMacAlgorithm.values()) {
         System.out.println("-----------------------------------------");
         System.out.println("Алгоритм: " + algorithm);
         byte[] key = JMac.initEncodedKey(algorithm);
         System.out.println("Ключ: " + encoder.encodeToString(key, "UTF-8"));
         byte[] result = JMac.encrypt(str.getBytes(), key, algorithm);
         System.out.println("Результат: " + JHex.encodeString(result));
      }
   }
}

2.6 Симметричное шифрование

package com.jianggujin.codec.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.junit.Test;
import com.jianggujin.codec.JBase64;
import com.jianggujin.codec.JBase64.JEncoder;
import com.jianggujin.codec.JSymmetrical;
import com.jianggujin.codec.JSymmetrical.JSymmetricalAlgorithm;

public class SymmetricalTest {
   String str = "jianggujin";
   File file = new File(getClass().getSimpleName() + ".dat");

   @Test
   public void test() throws Exception {
      System.out.println("Исходная строка: " + str);
      JEncoder encoder = JBase64.getEncoder();
      for (JSymmetricalAlgorithm algorithm : JSymmetricalAlgorithm.values()) {
         System.out.println("-----------------------------------------");
         System.out.println("Алгоритм: " + algorithm);
         byte[] key = JSymmetrical.initEncodedKey(algorithm);
         System.out.println("Ключ: " + encoder.encodeToString(key, "UTF-8"));

         byte[] encrypt = JSymmetrical.encrypt(str.getBytes(), key, algorithm);
         System.out.println("Шифрование: " + encoder.encodeToString(encrypt, "UTF-8"));
         System.out.println("Расшифровка: " + new String(JSymmetrical.decrypt(encrypt, key, algorithm)));

         System.out.print("Вывод потока шифрования: " + file.getAbsolutePath());
         OutputStream out = JSymmetrical.wrap(new FileOutputStream(file), key, algorithm);
         out.write(str.getBytes());
         out.flush();
         out.close();
         System.out.println();
         System.out.print("Ввод потока расшифровки: ");
         InputStream in = JSymmetrical.wrap(new FileInputStream(file), key, algorithm);
         byte[] buffer = new byte[1024];
         int len = in.read(buffer);
         System.out.println(new String(buffer, 0, len));
      }
   }
}

2.7 TripleDES (тройной алгоритм шифрования данных)

package com.jianggujin.codec.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.junit.Test;
import com.jianggujin.codec.JBase64;
import com.jianggujin.codec.JBase64.JEncoder;
import com.jianggujin.codec.JTripleDES;
import com.jianggujin.codec.JTripleDES.JTripleAlgorithm;
import com.jianggujin.codec.JTripleDES.JPadding;
import com.jianggujin.codec.JTripleDES.JWorkingMode;

public class TripleDESTest {
   String str = "jianggujin111111";
   File file = new File(getClass().getSimpleName() + ".dat");

   @Test
   public void test() throws Exception {
      System.out.println("Исходная строка: " + str);
      JEncoder encoder = JBase64.getEncoder();
      for (JTripleAlgorithm algorithm : JTripleAlgorithm.values()) {
         System.out.println("Алгоритм: " + algorithm);
         byte[] key = JTripleDES.initEncodedKey(algorithm);
         System.out.println("Ключ: " + encoder.encodeToString(key, "UTF-8"));
         for (JWorkingMode workingMode : JWorkingMode.values()) {
            System.out.println("Рабочий режим: " + workingMode);
            byte[] result = JTripleDES.encrypt(str.getBytes(), key, workingMode, algorithm);
            System.out.println("Результат шифрования: " + encoder.encodeToString(result, "UTF-8"));
            if (workingMode == JPadding.PKCS5Padding) {
               byte[] decrypt = JTripleDES.decrypt(result, key, workingMode, algorithm);
               System.out.println("Результат расшифровки: " + new String(decrypt));
            } else {
               System.out.println("Не поддерживается режим заполнения.");
            }
         }
      }
   }
}
``` Вот перевод текста на русский язык:

for (JPadding padding : JPadding.values()) { System.out.println("-----------------------------------------"); System.out.println(algorithm + "/" + workingMode + "/" + padding); byte[] encrypt = JTripleDES.encrypt(str.getBytes(), key, algorithm, workingMode, padding); System.out.println("Шифрование: " + encoder.encodeToString(encrypt, "UTF-8")); System.out .println("Расшифровка: " + new String(JTripleDES.decrypt(encrypt, key, algorithm, workingMode, padding)));

System.out.print("Шифрование потока вывода: " + file.getAbsolutePath());
OutputStream out = JTripleDES.wrap(new FileOutputStream(file), key, algorithm, workingMode, padding);
out.write(str.getBytes());
out.flush();
out.close();
System.out.println();
System.out.print("Расшифровка потока ввода: ");
InputStream in = JTripleDES.wrap(new FileInputStream(file), key, algorithm, workingMode, padding);
byte[] buffer = new byte[1024];
int len = in.read(buffer);
System.out.println(new String(buffer, 0, len));

} }


## 2.8 DH (алгоритм Диффи — Хеллмана)

```java
package com.jianggujin.codec.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyPair;
import org.junit.Test;
import com.jianggujin.codec.JBase64;
import com.jianggujin.codec.JBase64.JEncoder;
import com.jianggujin.codec.JDH;
import com.jianggujin.codec.JDH.JDHSymmetricalAlgorithm;

public class DHTest {
   String str = "jianggujin";
   File file = new File(getClass().getSimpleName() + ".dat");

   @Test
   public void test() throws Exception {
      System.out.println("Исходная строка: " + str);
      JEncoder encoder = JBase64.getEncoder();
      KeyPair keyPairA = JDH.initPartyAKey();
      byte[] keyPairAPrivate = keyPairA.getPrivate().getEncoded();
      byte[] keyPairAPublic = keyPairA.getPublic().getEncoded();
      System.out.println("Закрытый ключ стороны A: " + encoder.encodeToString(keyPairAPrivate, "UTF-8"));
      System.out.println("Открытый ключ стороны A: " + encoder.encodeToString(keyPairAPublic, "UTF-8"));
      KeyPair keyPairB = JDH.initPartyBKey(keyPairAPublic);
      byte[] keyPairBPrivate = keyPairB.getPrivate().getEncoded();
      byte[] keyPairBPublic = keyPairB.getPublic().getEncoded();
      System.out.println("Закрытый ключ стороны B: " + encoder.encodeToString(keyPairBPrivate, "UTF-8"));
      System.out.println("Открытый ключ стороны B: " + encoder.encodeToString(keyPairBPublic, "UTF-8"));
      for (JDHSymmetricalAlgorithm algorithm : JDHSymmetricalAlgorithm.values()) {
         System.out.println("-----------------------------------------");
         System.out.println("Симметричный алгоритм: " + algorithm);
         byte[] encrypt = JDH.encrypt(str.getBytes(), keyPairAPrivate, keyPairBPublic, algorithm);
         System.out.println("Шифрование: " + encoder.encodeToString(encrypt, "UTF-8"));
         System.out.println("Расшифровка: " + new String(JDH.decrypt(encrypt, keyPairBPrivate, keyPairAPublic, algorithm)));

         System.out.print("Шифрование выходного потока: " + file.getAbsolutePath());
         OutputStream out = JDH.wrap(new FileOutputStream(file), keyPairAPrivate, keyPairBPublic, algorithm);
         out.write(str.getBytes());
         out.flush();
         out.close();
         System.out.println();
         System.out.print("Расшифровка входного потока: ");
         InputStream in = JDH.wrap(new FileInputStream(file), keyPairBPrivate, keyPairAPublic, algorithm);
         byte[] buffer = new byte[1024];
         int len = in.read(buffer);
         System.out.println(new String(buffer, 0, len));
      }
   }
}

2.9 DSA (Digital Signature Algorithm)

package com.jianggujin.codec.test;

import java.io.File;
import java.security.KeyPair;
import org.junit.Test;
import com.jianggujin.codec.JBase64;
import com.jianggujin.codec.JBase64.JEncoder;
import com.jianggujin.codec.JDSA;
import com.jianggujin.codec.JDSA.JDSASignatureAlgorithm;
import com.jianggujin.codec.util.JCodecUtils;

public
``` Алгоритм: JRSASignatureAlgorithm.values()) {
    System.out.println("-----------------------------------------");
    System.out.println("Алгоритм подписи: " + алгоритм);
    byte[] signed = JRSA.sign(str.getBytes(), privateKey, алгоритм);
    System.out.println("Подпись: " + encoder.encodeToString(signed, "UTF-8"));

    boolean verify = JRSA.verify(str.getBytes(), signed, publicKey, алгоритм);
    System.out.println("Проверка подписи: " + verify);
  }

  byte[] encrypt = JRSA.encryptByPrivateKey(str.getBytes(), privateKey);
  System.out.println("Шифрование с помощью закрытого ключа: " + encoder.encodeToString(encrypt, "UTF-8"));
  System.out.println("Расшифровка с помощью открытого ключа: " + new String(JRSA.decryptByPublicKey(encrypt, publicKey)));

  System.out.print("Вывод потока шифрования с помощью закрытого ключа: " + file.getAbsolutePath());
  OutputStream out = JRSA.wrapByPrivateKey(new FileOutputStream(file), privateKey);
  out.write(str.getBytes());
  out.flush();
  out.close();
  System.out.println();
  System.out.print("Ввод потока расшифровки с помощью открытого ключа: ");
  InputStream in = JRSA.wrapByPublicKey(new FileInputStream(file), publicKey);
  byte[] buffer = new byte[1024];
  int len = in.read(buffer);
  System.out.println(new String(buffer, 0, len));

  encrypt = JRSA.encryptByPublicKey(str.getBytes(), publicKey);
  System.out.println("Шифрование с помощью открытого ключа: " + encoder.encodeToString(encrypt, "UTF-8"));
  System.out.println("Расшифровка с помощью закрытого ключа: " + new String(JRSA.decryptByPrivateKey(encrypt, privateKey)));

  System.out.print("Вывод потока шифрования с помощью открытого ключа: " + file.getAbsolutePath());
  out = JRSA.wrapByPublicKey(new FileOutputStream(file), publicKey);
  out.write(str.getBytes());
  out.flush();
  out.close();
  System.out.println();
  System.out.print("Ввод потока расшифровки с помощью закрытого ключа: ");
  in = JRSA.wrapByPrivateKey(new FileInputStream(file), privateKey);
  len = in.read(buffer);
  System.out.println(new String(buffer, 0, len));
}

2.12 Certificate (цифровой сертификат)

package com.jianggujin.codec.test;

import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;

import org.junit.Test;

import com.jianggujin.codec.JBase64;
import com.jianggujin.codec.JCertificate;
import com.jianggujin.codec.JCertificate.JKeyStore;

public class CertificateTest {
   @Test
   public void encode() throws Exception {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      char[] password = "123456".toCharArray();
      String alias = "www.jianggujin.com";
      String certificatePath = "test.cer";
      String keyStorePath = "test.pfx";
      byte[] data = "jianggujin".getBytes();

      KeyStore keyStore = JCertificate.getKeyStore(getClass().getResourceAsStream(keyStorePath), password,
            JKeyStore.JKS);
      X509Certificate certificate = (X509Certificate) JCertificate
            .getCertificate(getClass().getResourceAsStream(certificatePath));
      PrivateKey privateKey = JCertificate.getPrivateKey(keyStore, alias, password);
      PublicKey publicKey = JCertificate.getPublicKey(certificate);

      System.out.println("Действительно ли сертификат действителен: " + JCertificate.verifyCertificate(certificate));
      System.out.println("Пользователь: " + certificate.getSubjectDN().getName());
      System.out.println("Версия: " + certificate.getVersion());
      System.out.println("Серийный номер: " + certificate.getSerialNumber().toString(16));
      System.out.println("Алгоритм подписи: " + certificate.getSigAlgName());
      System.out.println("Тип сертификата: " + certificate.getType());
      System.out.println("Эмитент: " + certificate.getIssuerDN().getName());
      System.out.println(
            "Срок действия: " + format.format(certificate.getNotBefore()) + " до " + format.format(certificate.getNotAfter()));

      byte[] signResult = JCertificate.sign(data, keyStore, alias, password);
      System.out.println("Подпись: " + JBase64.getEncoder().encodeToString(signResult, "UTF-8"));
      System.out.println("Проверка сертификата: " + JCertificate.verify(data, signResult, certificate));
      System.out.println("Проверка хранилища ключей: " + JCertificate.verify(data, signResult,
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Сборник часто используемых операций шифрования и дешифрования Java. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/jianggujin-JCodec.git
git@api.gitlife.ru:oschina-mirror/jianggujin-JCodec.git
oschina-mirror
jianggujin-JCodec
jianggujin-JCodec
master