私は AES を使用して TCP 経由でデータを暗号化するプロジェクトに取り組んでいますが、答えのない問題があります。
Eclipse でソフトをテストしようとしましたが、エラーは発生しません。しかし、JARファイルとしてコンパイルすると、暗号化が変わります。
ここに私の情報源があります:
private final static String SECRETE_KEY = "xxxxxxxxxxxxxxxx";
private final static String IV = "0000000000000000";
/**
* Encrypt the message with the secrete key in parameter
*/
public static String encrypt(String message) throws Exception {
// The input length to encrypt should be a multiple of 16
while (message.length() % 16 != 0) {
message += " ";
}
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(SECRETE_KEY.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV.getBytes("UTF-8")));
byte[] cipherByteArray = cipher.doFinal(message.getBytes("UTF-8"));
String cipherMsg = "";
for (int i = 0; i < cipherByteArray.length; i++) {
cipherMsg += (char) cipherByteArray[i];
}
return cipherMsg;
}
/**
* Decrypt the message with the secrete key in parameter
*/
public static String decrypt(String cipherMsg) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(SECRETE_KEY.getBytes("UTF-8"), "AES");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV.getBytes("UTF-8")));
byte[] cipherByteArray = new byte[cipherMsg.length()];
for (int i = 0; i < cipherMsg.length(); i++) {
cipherByteArray[i] = (byte) cipherMsg.charAt(i);
}
return new String(cipher.doFinal(cipherByteArray));
}
これはエンコーディングの問題であり、すべて UTF-8 (ソースとメッセージ) で設定されていると考えていましたが、この JAR ファイルを別の Eclipse プロジェクトでライブラリとして使用すると、AES は正常に動作します。
誰も手がかりを持っていますか?
編集1:ANTビルドを使用しています
<project default="all" basedir="." name="JAR - MyProject">
<property name="jarFile" value="MyJar.jar" />
<path id="libraries">
<fileset dir="lib/">
<include name="*.jar"/>
</fileset>
</path>
<pathconvert property="lib.classpath" pathsep=" ">
<path refid="libraries"/>
<flattenmapper/>
</pathconvert>
<target name="clean">
<delete file="dist/${jarFile}"/>
<delete dir="build" />
<mkdir dir="dist" />
<mkdir dir="build" />
</target>
<target name="buildJar" depends="clean">
<mkdir dir="build/classes" />
<copy todir="build/classes">
<fileset dir="classes" includes="**/*.*"/>
</copy>
<jar jarfile="dist/${jarFile}" basedir="build/classes" compress="true" excludes="**/*.java">
<manifest>
<attribute name="Main-Class" value="MyMainClass" />
<attribute name="Class-Path" value="${lib.classpath}" />
</manifest>
</jar>
</target>
<target name="all" depends="buildJar" />
</project>