I am using Debian OS and ruby 1.8 version .
I have attached .pfx certificate file . Which was created using openssl
command as follows ,
create a file containing key and self-signed certificate
openssl req
-x509 -nodes -days 365
-newkey rsa:1024 -keyout mycert.pem -out mycert.pem
export mycert.pem as PKCS#12 file, mycert.pfx
openssl pkcs12 -export
-out mycert.pfx -in mycert.pem
-name “My Certificate”
Using the openssl library in ruby I am able to do encryption and
decryption . Apart from this . I encrypted data in C#( windows ) using
this .pfx file . The c# coding is ,
public string GetEncryptedText(string PlainStringToEncrypt)
{
X509Certificate2 x509_2 = new X509Certificate2("C:/mycert.pfx",
“paymate”,X509KeyStorageFlags.MachineKeySet);
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
foreach (X509Certificate2 cert in store.Certificates)
{
if
(cert.SubjectName.Name.Contains(DigitalCertificateName))
{
x509_2 = cert;
break;
}
}
if (x509_2 == null)
throw new Exception("No Certificate could be found in
name " + DigitalCertificateName);
try
{
string PlainString = PlainStringToEncrypt.Trim();
byte[] cipherbytes =
ASCIIEncoding.ASCII.GetBytes(PlainString);
RSACryptoServiceProvider rsa =
(RSACryptoServiceProvider)x509_2.PublicKey.Key;
byte[] cipher = rsa.Encrypt(cipherbytes, false);
return Convert.ToBase64String(cipher);
}
catch (Exception e)
{
throw e;
}
}
Encrypted Data is :
“qLH9NZcxGL2vwuee4uryO8xphinBdE7XWttQmWfLhmOXVv5kFHW3JHTR0MiDfvONcHtPtvzKaCvgKlThd2XoNQm3K0EfRMKyokvDSWITQjTjHMOKyNGRCknsfm1dTrlZKU5eYNV+Qzn+MDdJ2gAb4vldbjFchgMFs2Qb2RJz3f4=”
This encrypted data was created in C#(windows) using above code but
mycert.pfx was created in linux machine . Now I want to do
decryption in ruby linux .
I followed following decryption methods in ruby ,
create the privatekey.pem using openssl command is ,
openssl pkcs12 -in mycert.pfx -out private.pem -nodes
#give the password as “paymate”
ruby coding to decrypting is ,
private_key = OpenSSL::PKey::RSA.new(File.read("./private.pem"))
private_key.private_decrypt(Base64.decode64(“qLH9NZcxGL2vwuee4uryO8xphinBdE7XWttQmWfLhmOXVv5kFHW3JHTR0MiDfvONcHtPtvzKaCvgKlThd2XoNQm3K0EfRMKyokvDSWITQjTjHMOKyNGRCknsfm1dTrlZKU5eYNV+Qzn+MDdJ2gAb4vldbjFchgMFs2Qb2RJz3f4=”
))
#But it through me error
kindly provide me any other solution in ruby