AES-шифрование с использованием iv / pass / salt / итераций - PullRequest
0 голосов
/ 31 августа 2018

Следующий код groovy / java делает расшифровку заданной строки с паролем и iv.

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;

byte[] iv = "1234567812345678";
byte[] keyb = "ABCDEFGHIJKLMNOPQRSTUVWX";

IvParameterSpec ivspec = new IvParameterSpec(iv);
SecretKeySpec skey = new SecretKeySpec(keyb, "AES");

Cipher ci = Cipher.getInstance("AES/CBC/PKCS5Padding");
ci.init(Cipher.ENCRYPT_MODE, skey, ivspec);

String plainText = "Encrypt this text with AES - MODE CBC";

byte[] input = plainText.getBytes("UTF-8");
byte[] encoded = ci.doFinal(input);

System.out.println(encoded.encodeBase64().toString());

Я ищу несколько советов о том, как добавить в процесс и соль и итерации .

1 Ответ

0 голосов
/ 31 августа 2018

Полагаю, вы думаете о шифровании на основе пароля (PBE). Чтобы сделать это в Java, вам нужно что-то вроде этого ( source ):

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

public static byte[] encrypt(final byte[] data, final char[] password,
    final byte[] salt, final int noIterations) {
  try {
    final String method = "PBEWITHHMACSHA512ANDAES_256";
    final SecretKeyFactory kf = SecretKeyFactory.getInstance(method);
    final PBEKeySpec keySpec = new PBEKeySpec(password);
    final SecretKey key = kf.generateSecret(keySpec);
    final Cipher ciph = Cipher.getInstance(method);
    final PBEParameterSpec params = new PBEParameterSpec(salt, noIterations);
    return ciph.doFinal(data);
  } catch (final Exception e) {
    // best not to let the encryption error bubble out
    throw new RuntimeException("Spurious encryption error");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...