Следующая команда используется для создания хранилища ключей с именем myalias.p12 и экспорта сертификата с именем myalias2.cer.
Java Keytool - это утилита управления ключами и сертификатами. Он позволяет пользователям управлять своими собственными парами открытого и закрытого ключей и сертификатами.
E:\>keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36000 -alias myalias2 -keystore myalias.p12 -storetype pkcs12 -dname "cn=www.myalias.com, ou=myalias2, o=myalias2, l=tp, st=tp, c=tw" -storepass 123456 -keypass 123456
E:\>keytool -export -alias myalias2 -keystore myalias.p12 -storetype pkcs12 -rfc -file myalias2.cer -storepass 123456
Шифрование:
string input="hello";
X509Certificate2 myCertificate = GetCertFromCerFile("e:\\myalias2.cer");
RSACryptoServiceProvider provider1 = (RSACryptoServiceProvider)myCertificate.PublicKey.Key;
byte[] buffer1 = Encoding.UTF8.GetBytes(input);
byte[] result = provider1.Encrypt(buffer1, false);
string data= Convert.ToBase64String(result);
дешифрование:
44. RSACryptoServiceProvider provider2 = (RSACryptoServiceProvider)myCertificate.PrivateKey;
45. byte[] buffer2 = Convert.FromBase64String(data);
46. byte[] result2 = provider2.Decrypt(buffer2, false); // <-- error here
47. String decryptedMessage = Encoding.UTF8.GetString(result2);
Обычно он может выполнять операции шифрования. Но я обнаружил некоторые ошибки в строке 46 (при расшифровке):
Первое исключение типа
'System.NullReferenceException'
произошло в CertTest.exe поток
'' (0xcc8) вышел
с кодом 0 (0x0). в
CertTest.Program.Decrypt (Строковые данные)
в
D: \ vsworkspace \ CertTest \ CertTest \ Program.cs: линия
46 в
CertTest.Program.Main (String [] args)
в
D: \ vsworkspace \ CertTest \ CertTest \ Program.cs: линия
29
У кого-нибудь есть идея? Потому что я не знаю, как решить эту проблему.
Большое спасибо!