JCodec содержит часто используемые реализации кодирования и декодирования на Java.
Использовать 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.
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));
}
}
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));
}
}
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()));
}
}
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));
}
}
}
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));
}
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 )