Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/WPF RSA不';t解密文本_C#_Wpf_Rsa - Fatal编程技术网

C#/WPF RSA不';t解密文本

C#/WPF RSA不';t解密文本,c#,wpf,rsa,C#,Wpf,Rsa,当我试图解密C#中使用RSA生成的字符串时,我遇到了一个问题。它可以很好地加密字符串,但当我尝试使用私钥解密字符串时,它会抛出一个错误: Error occurred while decoding OAEP padding. 我尝试将fOAEP参数更改为true和false,将RSACryptServiceProviders更改为2048作为参数,但仍然不起作用 Project是一个WPF应用程序,它生成2个带密钥的文件,密钥由core.cs文件加载。 然后,正在加载密钥 我举的例子只使用公钥

当我试图解密C#中使用RSA生成的字符串时,我遇到了一个问题。它可以很好地加密字符串,但当我尝试使用私钥解密字符串时,它会抛出一个错误:

Error occurred while decoding OAEP padding.
我尝试将fOAEP参数更改为true和false,将RSACryptServiceProviders更改为2048作为参数,但仍然不起作用

Project是一个WPF应用程序,它生成2个带密钥的文件,密钥由core.cs文件加载。 然后,正在加载密钥

我举的例子只使用公钥加密字符串,而只使用私钥解密字符串

Core.cs文件
//已生成密钥
public void GeneratePublicKey(字符串publicKeyFile){
使用(var rsa=new RSACryptoServiceProvider(2048)){
rsa.PersistKeyInCsp=false;
if(File.Exists(publicKeyFile))
文件。删除(publicKeyFile);
//还有公钥。。。
var pubKey=rsa.ExportParameters(false);
//将公钥转换为字符串表示形式
字符串pubKeyString{
//我们需要一些缓冲
var sw=new System.IO.StringWriter();
//我们需要一个序列化程序
var xs=new System.Xml.Serialization.XmlSerializer(typeof(rsapameters));
//将密钥序列化到流中
序列化(sw,pubKey);
//从流中获取字符串
pubKeyString=sw.ToString();
}
writealText(publicKeyFile,pubKeyString);
}
}
public void GeneratePrivateKey(字符串privateKeyFile){
使用(var rsa=new RSACryptoServiceProvider(2048)){
rsa.PersistKeyInCsp=false;
if(File.Exists(privateKeyFile))
文件。删除(privateKeyFile);
//如何获取私钥
var privKey=rsa.ExportParameters(true);
//将公钥转换为字符串表示形式
字符串privKeyString;
{
//我们需要一些缓冲
var sw=new System.IO.StringWriter();
//我们需要一个序列化程序
var xs=new System.Xml.Serialization.XmlSerializer(typeof(rsapameters));
//将密钥序列化到流中
序列化(sw,privKey);
//从流中获取字符串
privKeyString=sw.ToString();
}
writealText(privateKeyFile,privKeyString);
}
}
//没有一般性的存在,只有一个层次(层次)
public参数ReadPublicKey(字符串publicKeyFile){
//里尔
字符串pubKeyString=File.ReadAllText(publicKeyFile);
//再转化
var sr=new System.IO.StringReader(pubKeyString);
//我们需要一个反序列化程序
var xs=new System.Xml.Serialization.XmlSerializer(typeof(rsapameters));
//从流中获取对象
返回(rsa参数)xs.反序列化(sr);
}
公共参数ReadPrivateKey(字符串privateKeyFile){
//里尔
字符串privKeyString=File.ReadAllText(privateKeyFile);
//再转化
var sr=new System.IO.StringReader(privKeyString);
//我们需要一个反序列化程序
var xs=new System.Xml.Serialization.XmlSerializer(typeof(rsapameters));
//从流中获取对象
返回(rsa参数)xs.反序列化(sr);
}
//这是一个公共场所
公共字符串加密(字符串公钥文件、字符串文本加密){
var csp=新的RSACryptServiceProvider();
导入参数(ReadPublicKey(publicKeyFile));
//对于加密,始终处理字节。。。
var bytesplantextdata=System.Text.Encoding.Unicode.GetBytes(textToEncrypt);
//应用pkcs#1.5填充并加密我们的数据
var bytesCypherText=csp.Encrypt(bytesplantextdata,true);
//我们可能需要密码文本的字符串表示形式…base64就可以了
Debug.WriteLine(“Texto Encriptado:+Convert.ToBase64String(bytesCypherText));
返回Convert.tobase64字符串(bytesCypherText);
}
/// 
///私人住宅
/// 
/// 
/// 
/// 
公共字符串解密(字符串privateKeyFile、字符串textToDecrypt){
//首先,从base64字符串中获取字节。。。
var bytesCypherText=Convert.FromBase64String(textToDecrypt);
//我们想要解密,因此需要csp并加载私钥
var csp=新的RSACryptServiceProvider();
导入参数(ReadPrivateKey(PrivateKey文件));
//解密并剥离pkcs#1.5填充
var bytesplantextdata=csp.Decrypt(bytesCypherText,true);
Debug.WriteLine(“Desencriptado:”+
System.Text.Encoding.Unicode.GetString(bytesPlainTextData));
//把我们的原始明文拿回来。。。
返回System.Text.Encoding.Unicode.GetString(bytesPlainTextData);
}
MainWindow.cs
公共部分类主窗口:窗口{
只读RsaEnc_rs=新的RsaEnc();
私有字符串_publicKeyFile=“./public.cert”;
私有字符串_privateKeyFile=“/private.key”;
公共主窗口(){
初始化组件();
}
私有void生成器单击(对象发送方,路由目标){
_R.GeneratePublicKey(_pu
      internal sealed class RSA
    {
        public static (string public_key, string private_key) getKeyPair()
        {
            try
            {
                var rsa_provider = new RSACryptoServiceProvider(1024);
                return (rsa_provider.ToXmlString(false), rsa_provider.ToXmlString(true));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static byte[] shroud_divulge(byte[] input_byte, string _key,bool is_shroud)
        {
            try
            {
                var rsa_provider = new RSACryptoServiceProvider();
                rsa_provider.FromXmlString(_key);
                var padding = RSAEncryptionPadding.OaepSHA256;

                switch(is_shroud)
                {
                    case true:
                        return rsa_provider.Encrypt(input_byte, padding);

                    case false:
                        return rsa_provider.Decrypt(input_byte, padding);
                }
                return null;
            }
            catch (Exception)
            {
                throw;
            }
        }

    }