我正在尝试找到一种使用私钥加密字符串并使用公钥解密它的方法。我使用OpenSSL生成密钥,如下所述:
http://www.akadia.com/services/ssh_test_certificate.html
这就是我目前拥有的
public static string Encrypt(string str, string key)
{
try
{
key = key.Replace(Environment.NewLine, "");
IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(key);
AsymmetricKeyAlgorithmProvider provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);
CryptographicKey publicKey = provider.ImportPublicKey(keyBuffer, CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey);
IBuffer dataBuffer = CryptographicBuffer.CreateFromByteArray(Encoding.UTF8.GetBytes(str));
var encryptedData = CryptographicEngine.Encrypt(publicKey, dataBuffer, null);
return CryptographicBuffer.EncodeToBase64String(encryptedData);
}
catch (Exception e)
{
throw;
return "Error in Encryption:With RSA ";
}
}
然而,在< code>ImportPublicKey方法上,我得到一个异常< code>ASN1损坏数据
传递给该方法的字符串key
具有以下格式:
var privateKey =
@“MIICXWIBAAKBGQDUTQFSNFIQX3AEPORHJYCCK007CFU4FXLUTIYF6U9IPDHYPD…yDxwZVmexltyK5Bwc26lmb 5ETEIC kZToYWcCucF8lsok=”;
所以OpenSSL生成的密钥文件的内容没有这部分:
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
好吧,所以我的代码是相当错误的,因为我想用私钥加密,但使用了< code>ImportPublicKey函数,正确的方法应该是;
public static string Encrypt(string str, string key)
{
try
{
key = key.Replace(Environment.NewLine, "");
IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(key);
AsymmetricKeyAlgorithmProvider provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);
var keyPar = provider.ImportKeyPair(keyBuffer, CryptographicPrivateKeyBlobType.Pkcs1RsaPrivateKey);
//CryptographicKey publicKey = provider.ImportPublicKey(keyBuffer, CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey);
IBuffer dataBuffer = CryptographicBuffer.CreateFromByteArray(Encoding.UTF8.GetBytes(str));
var encryptedData = CryptographicEngine.Encrypt(keyPar, dataBuffer, null);
var encryptedStr = CryptographicBuffer.EncodeToBase64String(encryptedData);
var signature = CryptographicEngine.Sign(keyPar, dataBuffer);
var signatureStr = CryptographicBuffer.EncodeToBase64String(signature);
return encryptedStr;
}
catch (Exception e)
{
throw;
return "Error in Encryption:With RSA ";
}
}
这可以使用RSA私钥对字符串进行加密。
但是,当我尝试使用公钥解密时,使用以下类似方法;
public static string Decrypt(string str, string key)
{
try
{
key = key.Replace(Environment.NewLine, "");
IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(key);
AsymmetricKeyAlgorithmProvider provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaSignPkcs1Sha256);
CryptographicKey publicKey = provider.ImportPublicKey(keyBuffer, CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo);
IBuffer dataBuffer = CryptographicBuffer.CreateFromByteArray(Encoding.UTF8.GetBytes(str));
var encryptedData = CryptographicEngine.Decrypt(publicKey, dataBuffer, null);
return CryptographicBuffer.EncodeToBase64String(encryptedData);
}
catch (Exception e)
{
throw;
return "Error in Decryption:With RSA ";
}
}
我得到一个< code > Method or operation not implemented(方法或操作未实现)异常,要么仍然有问题,要么在UWP还没有私有加密/公共解密方法。
我最后做的是让nuget软件包<code>可移植。BouncyCastle签名,并遵循此答案中的代码段:
C#BouncyCastle-使用公钥/私钥进行RSA加密
像沙姆一样工作。
使用指定密码生成对称密钥,保存并返回ID。 调用: web3.shh.generateSymKeyFromPassword(password, [callback]) 参数: password:String - 用于生成对称密钥的密码 callback:Function - 可选的回调函数,其第一个参数为错误对象,第二个参数为返回结果 返回值: String - 成功时返回ID,否则返回错误信息
我想得到的是 使用libnail加密密码salt 我有一个列表的盐,我想用它来加密/解密我的密码。当我加密密码时,我得到一个哈希返回,这样一个似乎可以工作,但在解密时,我总是得到假返回值。 我是否使用了错误的方法对libnaude进行加密/解密,还是完全朝着错误的方向行驶? 我的加密/解密源: 我感谢任何帮助! 多姆
我知道这很难...但我使用OpenSSL以一种非常标准的方式加密文件。该文件使用RSA-2048公钥在AES-256中加密。我想在Java中使用私钥解密文件。我研究了很长时间,尝试了很多方法,但似乎都行不通。我只是找到相关的问题与工作的解决方案,但不是确切地为我的问题。 我使用以下命令生成public-/private-key-pair:
我想用python实现下面的功能,它使用公钥加密密码,然后使用base 64进行编码。我搜索了许多答案,但没有找到解决方案,我想可能是我不明白。请给我一些建议好吗? 我使用以下代码,但它会引发错误。
问题内容: 我想生成rsa密钥对(公共和私有),然后将它们用于AES加密和解密。例如,用于加密的公共密钥和用于解密的私有密钥。我为此编写了一个简单的代码,但是问题是当我运行时这段代码我得到这个错误: 我该如何解决这个问题?我的加密代码如下: 问题答案: 如评论中所建议,我搜索了“混合密码术”。这个例子解决了我的问题。