私の問題は次のとおりです:Javaで暗号化するもの私は完全にJavaで解読できますが、mcrypt
は解読できません。 mcrypt
で暗号化するものmcrypt
で復号化できますが、Javaではできません。JavaとPHPの間でAES-256で暗号化されたデータを交換できません
Javaアプリケーションから暗号化されたデータをPHPページに送受信したいので、互換性が必要です。
ここ
JAVA ...私が持っているものだ...
public static String crypt(String input, String key){
byte[] crypted = null;
try{
SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
}
return Base64.encodeBase64String(crypted);
}
public static String decrypt(String input, String key){
byte[] output = null;
try{
SecretKeySpec skey = new SecretKeySpec(Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(Base64.decodeBase64(input));
}catch(Exception e){
}
return new String(output);
}
実行:
public static void main(String[] args) {
String key = "Zvzpv8/PXbezPCZpxzQKzL/FeoPw68jIb+NONX/LIi8=";
String data = "example";
System.out.println(Cpt.decrypt(Cpt.crypt(data, key), key));
}
出力:
example
PHP ...
function getEncrypt($sStr, $sKey) {
return base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sKey,
$sStr,
MCRYPT_MODE_ECB
)
);
}
function getDecrypt($sStr, $sKey) {
return mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$sKey,
base64_decode($sStr),
MCRYPT_MODE_ECB
);
}
実行:
$crypt = getDecrypt(getEncrypt($str, $key), $key);
echo "<p>Crypt: $crypt</p>";
出力:
Crypt: example�������������������������
キーで "例" 陰窩するPHPを使用した "Zvzpv8/PXbezPCZpxzQKzL/FeoPw68jIb + NONX/LIi8 =" 私は「YTYhgp4zC +を取得しますw5IsViTR5PUkHMX4i7JzvA6NJT1FqhoGY = "。 Javaを使用して同じキーで同じものを暗号化すると、 "+ tdAZq7WAVPXhB3Tp5 + g =="と表示されます。
私は正しい順序でbase64をエンコードしてデコードしています。私はJavaとPHPの間でbase64エンコードとデコードの互換性をテストしています。
私はちょっとそれを発見しましたが、私はAES-128を使っていました。だからそれは確かに256です。これらの行については、暗号化されたデータには常に文字列のみが含まれ、バイナリデータは含まれないと確信しています。 – LZZ