Hi, Base64 data by itself isn't PEM data, there need to be headers and footers around it. If you have a look at what the PemWriter produces you should get the idea.
In this case you can get by with using Org.BouncyCastle.Security; using Org.BouncyCastle.Utilities.Encoders; byte[] keyData = Base64.Decode("MIIC...."); AsymmetricKeyParameter privKey = PrivateKeyFactory.CreateKey(keyData); Regards, David On 13/10/15 22:04, Lingfeng Zhuang wrote: > I generate private key in java, but failed load in C# with BouncyCastle. > > C# > PemReader pemReader = new PemReader(new StringReader( > > @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJx5AYmcTmkHIH3qUFmLw7pmPoTS > pAS/1RnobIMSnjk5L3dgzvB47Q+24XZ1G4o/H/K8ZoCBOrQ61cFWKLzg8jr756n15c/O9L95YSkl > OhjGvf3kIw+3dphhfkWuWrH1iIxZ5Q9zxhu8H0zfWTB7XPYVuwoPz1GRDr9Co9+sJi4HAgMBAAEC > gYB0B69CMixa6bQIazbGEERF9wepSuHhu7b0jUvaLnYyDNvL9HfADowMORsb0l9ntsOkJl0EMdAs > Ueysf42Z8lzsgp4VbTUsbwmX7lsS9fPY1fTVLDLZ8koOco+h+U/aXF10vuSnbJJqDbEDVqOWeGOz > vcIkP+5KZ1agZvcLj/f9EQJBANh2Hygv3UcUTRUcOvkVvCXdl4pg3DvjPpG6T1be2ZZqpclDpqJn > 4q7bC7lk6JVSXuCvuu5tZYGext1B4N0btOMCQQC5DcWIHFJm4+W5Hb4CeGCqHixr5oQSlxZGvdE7 > JPjPFo/oy0PVA6Aj6YHurjmc2de1NUWIQgpJ0bgfIrTS4M+NAkAeozlturibIuh2IHTIZKcoxOB6 > GZOSdmuYvMIWDZzGiXnFruma+xE+popWR04UNIBxVO4kaR+A5TRIhNaK9Sz5AkBcbquO7A6gxA63 > 40pIc5ZdAstPbgnkO0FuPlvnPfVlgzCIqBcOrEvuBDHZZX7zgMBFDAHaKJp4+t8L9kr51j71AkEA > lPVyDQfgzQpFDjdcnJe+rgIi0Q9hrcJmI2N3hP2vhX1Kdh+JzAeAdbYppPCVqO/Ovv+akES8hu8s > uKiWr7FfxA==")); > object obj = pemReader.ReadObject(); > > *obj is null.* > > JAVA Source Code: > > import java.security.KeyPair; > import java.security.KeyPairGenerator; > import java.security.PrivateKey; > import java.security.PublicKey; > import java.security.SecureRandom; > > public class RSAEncrypt { > public static void createKeyPairs() throws Exception { > // create the keys > KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); > generator.initialize(1024, new SecureRandom()); > KeyPair pair = generator.generateKeyPair(); > PublicKey pubKey = pair.getPublic(); > PrivateKey privKey = pair.getPrivate(); > byte[] pk = pubKey.getEncoded(); > byte[] privk = privKey.getEncoded(); > String strpk = new String(getASE64FromBytes(pk)); > String strprivk = new String(getASE64FromBytes(privk)); > > System.out.println("PublicKey Base64:\r\n" + strpk); > System.out.println(); > System.out.println("PrivateKey Base64:\r\n" + strprivk); > } > > public static void main(String[] args) throws Exception { > createKeyPairs(); > } > > public static String getASE64FromBytes(byte[] s) { > if (s == null) > return null; > return (new sun.misc.BASE64Encoder()).encode(s); > } > } > > JAVA console output: > > PublicKey Base64: > MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCceQGJnE5pByB96lBZi8O6Zj6E0qQEv9UZ6GyD > Ep45OS93YM7weO0PtuF2dRuKPx/yvGaAgTq0OtXBVii84PI6++ep9eXPzvS/eWEpJToYxr395CMP > t3aYYX5Frlqx9YiMWeUPc8YbvB9M31kwe1z2FbsKD89RkQ6/QqPfrCYuBwIDAQAB > > PrivateKey Base64: > MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJx5AYmcTmkHIH3qUFmLw7pmPoTS > pAS/1RnobIMSnjk5L3dgzvB47Q+24XZ1G4o/H/K8ZoCBOrQ61cFWKLzg8jr756n15c/O9L95YSkl > OhjGvf3kIw+3dphhfkWuWrH1iIxZ5Q9zxhu8H0zfWTB7XPYVuwoPz1GRDr9Co9+sJi4HAgMBAAEC > gYB0B69CMixa6bQIazbGEERF9wepSuHhu7b0jUvaLnYyDNvL9HfADowMORsb0l9ntsOkJl0EMdAs > Ueysf42Z8lzsgp4VbTUsbwmX7lsS9fPY1fTVLDLZ8koOco+h+U/aXF10vuSnbJJqDbEDVqOWeGOz > vcIkP+5KZ1agZvcLj/f9EQJBANh2Hygv3UcUTRUcOvkVvCXdl4pg3DvjPpG6T1be2ZZqpclDpqJn > 4q7bC7lk6JVSXuCvuu5tZYGext1B4N0btOMCQQC5DcWIHFJm4+W5Hb4CeGCqHixr5oQSlxZGvdE7 > JPjPFo/oy0PVA6Aj6YHurjmc2de1NUWIQgpJ0bgfIrTS4M+NAkAeozlturibIuh2IHTIZKcoxOB6 > GZOSdmuYvMIWDZzGiXnFruma+xE+popWR04UNIBxVO4kaR+A5TRIhNaK9Sz5AkBcbquO7A6gxA63 > 40pIc5ZdAstPbgnkO0FuPlvnPfVlgzCIqBcOrEvuBDHZZX7zgMBFDAHaKJp4+t8L9kr51j71AkEA > lPVyDQfgzQpFDjdcnJe+rgIi0Q9hrcJmI2N3hP2vhX1Kdh+JzAeAdbYppPCVqO/Ovv+akES8hu8s > uKiWr7FfxA== > > Thanks! >