제가 일하고있는 지불 게이트웨이가 있으며 그들은 자바 데모가 작동하지만 나는 이것을 PHP에서 대신 구현하고 싶습니다.자바 RSA에서 PHP로 phpseclib RSA
지불 게이트웨이는 무작위로 생성 된 키가있는 3DES를 사용하여 페이로드를 암호화합니다. 그 키는 지불 게이트웨이의 PUBLIC 키를 사용하여 RSA로 암호화되었습니다.
문제는 PHP 스크립트를 사용하여 해당 키에서 RSA 암호화를 수행 할 때 지불 게이트웨이가 키를 올바르게 추출 할 수 없으며 PHP의 RSA 암호화가 올바르게 작동하지 않는 것입니다 ...
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);
}
Java 버전이
을 사용했다 : 나는 PHP 스크립트에서 나왔다 무엇 여기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;
}
}
그리고 :
여기 RSA 암호화의 자바 버전입니다 PKCSPADDING 그래서 phpseclib 모드를 PKCSPADDING 인 2로 설정했지만 여전히 작동하지 않습니다. 내가 놓친 게 있니? 누구든지 나를 위해 그것을 지적하시기 바랍니다 수 있습니까?
업데이트 :이 그것을 일으키는 이유가 있지만, 나는 "----- BEGIN PUBLIC KEY -----"와 "----- END의 PUBLIC을 제거한 경우
확실하지 않음 KEY ---- "부분과 그것이 작동했습니다.
모두에게 감사드립니다.
이 당신이 지불 게이트웨이를 사용하여 재고 할 수 있습니다 매우 잘못된 소리에 대한 거의 모든 것을. – pvg
나는 pvg와 함께있다. 그 줄을 제거해서는 안된다. 나는 당신이 그것을 게시하고'echo $ rsa'를하고 당신이 올린 열쇠와 같은 열쇠를 가지고있을 때 당신의 열쇠를 적재하려고 시도했다. 나는 또한 당신이 구술 한 선을 지우려고했는데, 그렇게했을 때도 같은 열쇠를 얻었습니다. 그래서 그 줄을 제거하는 것이 열쇠를 바꾸는 것 같지 않습니다. PKCS1 패딩은 랜덤 화되어있어 지불 게이트웨이가 무작위로 선택할 수있는 모든 가능한 바이트를 정확하게 수용 할 수없는 것 같아요. – neubert
게이트웨이에 가장 적합한 기술을 사용하고 있지는 않습니다. 하지만 우리는 실제로 시작할 선택의 여지가 없습니다. 그러나 무엇을 상관없이 도움과 피드백에 정말로 감사드립니다! –