-3
皆さん、Javaの例のAES256暗号化を使用するAPIをPHPに統合しようとすると、大きな障害になっています。これはドキュメントにあるJavaバージョンです。このことからJavaのAES256暗号化アルゴリズムをPHPに変換する
package com.partner.carrier.library;
import java.io.UnsupportedEncodingException;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.DataLengthException;
import org.bouncycastle.crypto.InvalidCipherTextException;
import org.bouncycastle.crypto.engines.RijndaelEngine;
import org.bouncycastle.crypto.modes.CBCBlockCipher;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.paddings.ZeroBytePadding;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
import org.bouncycastle.util.encoders.Base64;
import com.partner.config.ConfigData;
public class AES {
private static byte[] _sessionKey = "YOUR-KEY".getBytes();
private static byte[] _initialVector = "INITVECTOREXAMPLE".getBytes();
private static int _keySize = 256;
private static int _blockSize = 128;
public static String Encrypt(String txt)
{
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new RijndaelEngine(_blockSize)), new ZeroBytePadding());
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(_sessionKey, 0, (_keySize/8)), _initialVector, 0, (_blockSize/8));
cipher.init(true, ivAndKey);
try {
byte[] decoded = txt.trim().getBytes("UTF-8");
byte[] encoded = new byte[cipher.getOutputSize(decoded.length)];
int len = cipher.processBytes(decoded, 0, decoded.length, encoded, 0);
cipher.doFinal(encoded, len);
return new String(Base64.encode(encoded));
}
catch (DataLengthException | IllegalStateException | InvalidCipherTextException | UnsupportedEncodingException e) {
return null;
}
}
}
私はこの
openssl_encrypt($data, "aes-256-cbc", “YOURKEY”, null, "INITVECTOREXAMPLE");
のようにPHPで何かを実行する必要があることを収集することができますし、私はそれをBase64でにその結果を変換して返す必要がありますか?これは正しいです? ZeroBytePadding()呼び出しとそのすべてが私にとって本当に混乱しています。
ありがとうございました! :)は
* "そして、その結果をBase64に変換して返すべきですか?" * - これはすでにBase64でエンコードされています。そのコード行から何を得るのか見ていないのですか? * "ZeroBytePadding()呼び出しとそのすべてが私にとって本当に混乱しています。" * - なぜですか? 'openssl_encrypt'のドキュメントを読んでいないのですか?オプション 'OPENSSL_ZERO_PADDING'が含まれています。 @ArtjomB。 –
申し訳ありませんが、質問がばかばかしい場合は、私は少し前にこの種のことをやったことがないので、私は圧倒されている理由は、PHPでopensslを見てきたのは初めてです。あなたにとって私には明らかなことはありません。 しかし、私はそれをやったことがあります。その点を踏まえれば、理論的にはJavaの例と同じ出力が得られますか? –