EDIT2: Convert.FromBase64Stringは私の救世主です。コンマがすべてこのような文字列に含まれるかどうかは誰にも分かりますか?私は基本的なCSV解析を行っています。それは私はいつも引用符を使用することができます(しかし、このような文字列に引用符を入れることもできます)。しかし、これは私にとってはちょっとしたプロジェクトなので、 '、'で分割して解析する方が簡単です。C#RSACryptoServiceProvider ToXmlString()/ FromXmlString()
EDIT: OK暗号化されたバイトを文字列に変換してから、その文字列を復号化するバイトに変換すると問題が発生するようです。実際に暗号化された文字列をどこかに格納し、その文字列を復号化できるようにするために、私はこれをどのように行うことができますか?
xmlファイルに公開鍵(および非公開のテスト用)を保存しようとしているため、後で同じファイルを読むことができますが、解読しようとすると「不正なデータ」エラーが発生します。誰かが私が間違っているのを見ることができますか?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace EncryptionTest
{
class Program
{
static void Main(string[] args)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes("Test data");
WriteRSAInfoToFile();
string enc = Encrypt(dataToEncrypt);
enc = Decrypt(enc);
}
static void WriteRSAInfoToFile()
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
TextWriter writer = new StreamWriter("C:\\publicKey.xml");
string publicKey = RSA.ToXmlString(false);
writer.Write(publicKey);
writer.Close();
writer = new StreamWriter("C:\\privateKey.xml");
string privateKey = RSA.ToXmlString(true);
writer.Write(privateKey);
writer.Close();
}
static string Encrypt(byte[] data)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider encrypt = new RSACryptoServiceProvider();
TextReader reader = new StreamReader("C:\\publicKey.xml");
string publicKey = reader.ReadToEnd();
reader.Close();
encrypt.FromXmlString(publicKey);
byte[] encryptedData = encrypt.Encrypt(data, false);
return ByteConverter.GetString(encryptedData);
}
static string Decrypt(string data)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
RSACryptoServiceProvider decrypt = new RSACryptoServiceProvider();
TextReader reader = new StreamReader("C:\\privateKey.xml");
string privateKey = reader.ReadToEnd();
reader.Close();
decrypt.FromXmlString(privateKey);
byte[] d = ByteConverter.GetBytes(data);
byte[] decryptedData = decrypt.Decrypt(d, false); // ERROR: bad data
return ByteConverter.GetString(decryptedData);
}
}
}
あなたが正しくありました。 Base64が働いた。ありがとうございました – user441521
文字列を使って暗号文を往復させない - http://blogs.msdn.com/b/shawnfa/archive/2005/11/10/491431.aspx ここで言及する価値があります。 – gmaran23