私は完全な暗号化の初心者でありAESEncryption
、AES キーを使用してファイルと文字列の読み取り/書き込みに使用できる単純な (ha!) ユーティリティ クラスを探していました。何かのようなもの:
String toEcnrypt = "This is a secret message!";
AESEcnryption aes = new AESEncryption(); // 256-bit by default
String encrypted = aes.encrypt(toEncrypt);
// Do some stuff
String shouldBeSameAsFirstString = aes.decrypt(encrypted);
AESEncryption
がインスタンス化されるたびにKeySpec
が生成されるという考え方です (そして、その後のストレージのために API によって返される可能性があります)。これは、私よりもはるかに優秀な人々のコードを調べた結果、私が作り上げたものです(ここにあなたのコードが表示されている場合は、ありがとう!):
public class AESEncryption {
private SecretKeySpec keySpec;
public AESEncryption()
{
super();
setKeySpec(AES256Encryption.generateAES256KeySpec());
}
// Uses 256-bit encryption by default.
public static SecretKeySpec generateAES256KeySpec()
{
// Stack variables
byte[] byteArray = new byte[16];
SecretKey oTmpKey = null;
KeyGenerator oKeyGen;
try
{
oKeyGen = KeyGenerator.getInstance("AES");
oKeyGen.init(256);
oTmpKey = oKeyGen.generateKey();
}
catch(Throwable oThrown)
{
throw new RuntimeException(oThrown);
}
byteArray = oTmpKey.getEncoded();
return new SecretKeySpec(byteArray, "AES");
}
public String encrypt(final String p_strPlaintext)
{
String strEncrypted = null;
try
{
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
strEncrypted = Base64.encodeBase64String(cipher
.doFinal(p_strPlaintext.getBytes()));
}
catch(Throwable oThrown)
{
System.out.println(oThrown.getMessage());
throw new RuntimeException(oThrown);
}
return strEncrypted;
}
}
Base64 En/Decoding には Commons Codec を使用しています - なぜですか? 私が言ったように、私は仮想通貨の初心者であり、それが仕事を成し遂げるように見える唯一のことだったからです!
このコードを使用すると:
// This creates a unique key spec for this instance.
AESEncryption aes = new AESEncryption();
String toEncrypt = "blah";
// Throws a Throwable and prints the following to the console:
// "Illegal key size or default parameters"
String encrypted = aes.encrypt(toEncrypt);
質問者が同じ問題を抱えていたSOでこの質問を見ましたが、JCEが不足している可能性があることがわかりました。JCEについてほとんど何も知らないので、私が集めたものは次のとおりです。
- Java プラットフォームで AES アルゴリズムを実行するには、JCE が必要です。
- JCE は ZIP としてダウンロードされますが、実際には 2 つの JAR しか含まれていません
これら 2 つの JAR (US_export_policy
およびlocal_policy
) をプロジェクトのビルド パス (Eclipse) に配置し、コードを再実行しました。再び同じ問題。リンクされた記事は、これらの JAR を JRE に含めることを推奨するインストール手順を参照していることを知っていますが、実行時には、私のアプリはクラスパス上の JAR を見つけることだけを気にする必要があります。
実行時のクラスパスで JCE を使用できるようにするために、Elcipse 内からできることはありますか? または、ベースから外れていて、これらのエラーの原因となっているコードにバグがありますか?