Information Security Stack Exchange is a question and answer site for information security professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

My requirements are:

Requirement 1: Share public key to java server.


  1. Generate public-private keys in iOS app.
  2. Store the generated keys in keychain.
  3. Send generated public key to java server.
  4. Java server shall be able to store shared public key in database.

Requirement 2: Store public key sent by java server.


  1. Java server sends public key of other user.
  2. Process data sent by java server and generate public key from it.
  3. Store generated key in keychain, which can be later retrieved for encrypting message to be transferred.

I am able to achieve steps 1-2 in requirement 1 by using below method defined in SecKeyWrapper class (CommonCrypto sample):

- (void)generateKeyPair:(NSUInteger)keySize

Question 1: Now problem is- how shall I send that key to java server?

We have getPublicKeyBits method in the same class, which returns an NSData object, on some googling I found that it is in DER encoded format.

Question 2: If I send the same NSData object to server, which I guess it will interpret as ByteBuffer object, will it be possible for other devices, in my case it could be android, to interpret that data?

Question 3: What is the best way to share public key in above scenarios?

share|improve this question

Java servers and Android apps expect the public key in X.509 format, see on how to convert.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.