2014-04-04 9 views
0

이 Java 함수를 사용하여 키 쌍을 만들었습니다. 나는이 문제를 어떤 형식이 키 알고 싶어크립트에서 사용할 핵심 형식 RSA

0��0 
    *�H�� 

:

 KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyAlgorithm); 
     keyGen.initialize(numBits); 
     KeyPair keyPair = keyGen.genKeyPair(); 
     PrivateKey privateKey = keyPair.getPrivate(); 
     PublicKey publicKey = keyPair.getPublic(); 

     // Get the bytes of the public and private keys 
     byte[] privateKeyBytes = privateKey.getEncoded(); 
     byte[] publicKeyBytes = publicKey.getEncoded(); 

나는 (비슷한 여기에 붙여 넣기 할 수 앨리스는하는)이 공개 키를 가지고? pem/der?

내 RSA PHP 코드에서이 키를 사용하고 싶습니다. 특정 형식으로 변환해야하는지 여부

$keyData =file_get_contents($configValues['metPubKey']); //'metPubKey 'variable contain file path 

    $rsa = new Crypt_RSA(); 

     try{ 
      $rsa->loadKey($keyData); // public key 
      // $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_XML); 
      //$rsa->setHash('md5'); 
      $encryptedToken = base64_encode($rsa->encrypt($token)); 
      print_r("after : \"".$encryptedToken."\""); 
     }catch(Exception $e){ 
      // print_r($e); 
      die; 
     } 

아무런 예외도 발생시키지 않습니다. 그러나 동일한 데이터를 사용하여 동일한 코드를 실행하는 동안 호기심이 생길 때마다 서로 다른 토큰이 생성됩니다. 나는 단지 확인하고 싶다.

PHP에서 RSA 공개 키를 사용하여 데이터를 암호화하는 다른 방법이 있습니까?

+0

이 부분은 자바가 매우 잘못 생각한 부분 중 하나입니다. 공개 키의 경우, getEncoded()에 의해 돌려 주어지는 오브젝트는, DER로 encode 된 ASN. 1 SubjectPublicKeyInfo 오브젝트입니다. –

+0

개인 키와 공개 키는 모두 형식이 다릅니다. – stefun

+0

Oracle 제공 업체의 경우 예. 개인 키 PKCS # 8 형식으로 생각합니다. ['Key'] (http://docs.oracle.com/javase/7/docs/api/java/security/Key.html)에 대한 설명서에는 몇 가지 세부적인 내용이 있습니다. 참고 사항 : DER은 형식이 아닌 * 인코딩 *입니다. –

답변

0

불행히도 바이너리 원시 데이터를 처리 할 때 Java는 매우 어색합니다 ... 그러나 재생 공격을 방지하기 위해 임의의 항목을 연결하는 주요 PKCS 패딩 때문에 매번 다른 토큰을 얻습니다. 암호화 된 데이터에 대한 통계 분석

FYI 대칭 키를 암호화하고 큰 이진 데이터를 인코딩/해독하는 데이 키를 사용하려고합니다. RSA를 직접 사용하여 최종 데이터를 인코딩/디코딩하지 마십시오!

+0

샘플을 제공 할 수 있습니까? 대칭 키 개념을 얻지 못했습니다. – stefun

+0

키가 der 인코딩되었습니다. crypt_rsa에 특정 형식이 필요합니다. – stefun

+0

@stefun : 대칭 키 암호화는 양 당사자가 동일한 키 K 첫 번째 대칭 암호화를 알지 못하면 비대칭 키 암호화를 이해할 수 없습니다. :) –