내가 성취하고자하는 것에 대한 배경 지식.PHP에서 Java 암호화를 복제하는 방법은 무엇입니까?
1 부
PHP 서버는 자바 기반 장치와 통신합니다. PHP는 OpenSSL을 사용하여 공개/개인 키 쌍을 생성 한 다음 장치에 공개 키를 보내고 공개 키를 사용하여 생성 된 macKey
(base64로 인코딩 됨)을 다시 제공합니다. PHP는 이제 개인 키를 사용하여 macKey
을 base64 디코딩하고 해독해야합니다.
PHP의 Java 코드 단편에 해당하는 것은 무엇입니까? 여기
String base64EncodedMacKey = "LkvTT9LFj5lcxRRB8KrwwN906fSIDDcJvQK3E7a5PbR+Ox9WnslOs32jSCC9FkE8ouvr2MfWwtppuZmoPjaxwg3yAQI4UN3T1loISuF2VwKWfJ45fywbK9bNnD5Cw7336mjoGctv77Tg3JXPrsRwgMGIlBsNwdt1B0wgT4MMMAjl32TnBI3iwQ94VTMHffrK+QToddTahRHHoVsr3FVrETdiqKXdkiX1jES53im5lrXYIsY89UFkGzPo+3u4ijKIQWSLvYnA5wXI128gFHKxKYS82MbJDUn9i1RVFsGaP6T3nQRSX5SZNpSe5yGFWwMgYOx0KXMgET82FeaL2hfWuw==";
byte[] base64DecodedMacKey = DatatypeConverter.parseBase64Binary(base64EncodedMacKey);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, keypair.getPrivate());
byte[] macKey = cipher.doFinal(base64DecodedMacKey);
그러나 나는
macKey
나타나는대로
$decrypted
위의 일부 이진 데이터를 보유하고
$macKey = 'LkvTT9LFj5lcxRRB8KrwwN906fSIDDcJvQK3E7a5PbR+Ox9WnslOs32jSCC9FkE8ouvr2MfWwtppuZmoPjaxwg3yAQI4UN3T1loISuF2VwKWfJ45fywbK9bNnD5Cw7336mjoGctv77Tg3JXPrsRwgMGIlBsNwdt1B0wgT4MMMAjl32TnBI3iwQ94VTMHffrK+QToddTahRHHoVsr3FVrETdiqKXdkiX1jES53im5lrXYIsY89UFkGzPo+3u4ijKIQWSLvYnA5wXI128gFHKxKYS82MbJDUn9i1RVFsGaP6T3nQRSX5SZNpSe5yGFWwMgYOx0KXMgET82FeaL2hfWuw==';
$base64DecodedMacKey = base64_decode($macKey);
openssl_private_decrypt($base64DecodedMacKey, $decrypted, $privateKey);
를 해독 할 때 문자열 대 바이트 배열을 사용하는 방법에 대한 혼란 스러워요, 그래서 '내가 PHP에서 시도거야
부 ... 내가 바이트 배열로 변환 또는 문자열로 처리해야하는지 여부를 확실 해요 2.
각 요청에는 counter
이 있습니다. 위의 Java 코드에서 macKey
은 counter
에서 MAC 값을 만드는 데 사용됩니다.
PHP의 Java 코드 단편에 해당하는 것은 무엇입니까?
int counter = 0;
String nextCounter = String.valueOf(++counter);
SecretKeySpec signingKey = new SecretKeySpec(macKey, "AES");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] counterMac = mac.doFinal(nextCounter.getBytes("UTF-8"));
String base64EncodedMac = DatatypeConverter.printBase64Binary(counterMac);
위의 base64EncodedMac
은 마침내 통신을 확인하기 위해 장치로 전송됩니다.
다른 솔루션을 검색해 보았습니다. 그러나 승인을 위해 PHP에서 유효한 base64EncodedMac
문자열을 생성하지 못했습니다.