1

私は 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>
4

1 に答える 1