私が取り組んでいる支払いゲートウェイがありますが、Javaデモが動作していますが、代わりにこれをPHPで実装したいと思います。Java RSAからPHP phpseclib RSA
支払いゲートウェイは、ランダムに生成されたキーで3DESを使用してペイロードを暗号化します。 そのキーは、支払いゲートウェイのPUBLICキーを使用してRSAで暗号化されています。
問題は、私がそのキーでRSA暗号化を行うためにphpスクリプトを使用すると、支払いゲートウェイが鍵を正しく抽出できず、明らかにPHP上のRSA暗号化が正しく機能していませんでした...
ここでRSA暗号のJavaバージョンです:Javaバージョンを使用していた
use phpseclib\Crypt\RSA as RSA;
$PUB_KEY = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ1fKGMV/yOUnY1ysFCk0yPP4bfOolC/nTAyHmoser+1yzeLtyYsfitYonFIsXBKoAYwSAhNE+ZSdXZs4A5zt4EKoU+T3IoByCoKgvpCuOx8rgIAqC3O/95pGb9n6rKHR2sz5EPT0aBUUDAB2FJYjA9Sy+kURxa52EOtRKolSmEwIDAQAB
-----END PUBLIC KEY-----';
$PAYLOAD = 'b78850d2f35108b4bc4e7a41';
function encrypt($key,$payload){
$rsa = new RSA();
$rsa->loadKey($key); // public key
$rsa->setEncryptionMode(2);
$ciphertext = $rsa->encrypt($payload);
return base64_encode($ciphertext);
}
:
public static byte[] encrypt(byte[] data, String pubKey64) {
try {
byte[] key = Toolkit.base64Decode(pubKey64);
KeyFactory rsaKeyFac = KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(key);
RSAPublicKey pbk = (RSAPublicKey) rsaKeyFac.generatePublic(keySpec);
System.out.println("MODE:"+Cipher.ENCRYPT_MODE);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
cipher.init(Cipher.ENCRYPT_MODE, pbk);
byte[] encDate = cipher.doFinal(data);
return encDate;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
そして、ここでは、私はPHPスクリプトでで出てきた何PKCSPADDINGので、phpseclibのモードをPKCSPADDINGの2に設定しましたが、それでも動作しません。私は何か不足していますか?誰でも私のためにそれを指摘できますか?
UPDATE:これはそれを引き起こしている理由があるが、私は "----- BEGIN PUBLIC KEY -----" と「----- ENDのPUBLICを削除した場合
わかりませんKEY ---- "の部分が働いていました。
皆様のご協力ありがとうございます。
これについてのほとんどすべては、あなたがその支払いゲートウェイを使用して再考したい場合がありますので、間違って聞こえます。 – pvg
私はpvgです。これらの行を削除しても違いはありません。あなたが投稿し、 'echo $ rsa'を実行して、あなたが投稿したのと同じ鍵を持っているときにあなたの鍵を読み込もうとしました。私はまたあなたがあなたが言った線を取り除こうとしたが、私はそれをやったときに同じ鍵を持っていた。だから、それらの行を削除するようなことは、キーを変更しているようには思えません。 PKCS1のパディングはランダム化されているため、支払いゲートウェイは、ランダムに選択できる可能性のあるすべてのバイトを正しく収容できないようです。 – neubert
ゲートウェイには最高の技術が使用されていませんしかし、私たちは本当に始めることを選択する必要はありません。しかし、何に関係なく、本当に助けとフィードバックに感謝! –