次のように私はC#クラスを持っている:C#でオブジェクトをシリアル化して改ざんを防止する方法は?
public class TestObj
{
private int intval;
private string stringval;
private int[] intarray;
private string[] stringarray;
//... public properties not shown here
}
私は文字列に、このクラスのインスタンスをシリアル化したいと思います。また
:
私はURLへのQueryStringのparamとしてこの文字列を追加します。だから私は、文字列が簡単に改ざんされないようにするために何らかの努力をしたいと思います。
また、私は直列化方法が効率的であり、文字列のサイズがminmalであることを望みます。
具体的な.NET Frameworkクラス/メソッドの提案を使用する必要がありますか?
public String SerializeObject(TestObj object)
{
String Serialized = String.Empty;
MemoryStream memoryStream = new MemoryStream ();
XmlSerializer xs = new XmlSerializer(typeof(TestObj));
XmlTextWriter xmlTextWriter = new XmlTextWriter (memoryStream, Encoding.UTF8);
xs.Serialize (xmlTextWriter, object);
memoryStream = (MemoryStream) xmlTextWriter.BaseStream;
Serialized = UTF8Encoding.GetString(memoryStream.ToArray());
return Serialized;
}
2)改ざんを防ぐために:シリアライズする
この問題は、宛先とのシークレットの共有や更新に対処できないという問題があります。おそらく、改ざんを防止したい場合は、反対側が無効な値をチェックする方法を知っている必要があります。また、予測可能な秘密を使用すると、誰かがオブジェクトを改ざんしてハッシュを再計算する可能性があります。 – Omniwombat
ホイールを改造しないでください。 CLRは適切な暗号化技術者によって見直されたHMAC署名をボックスから提供します。 –
@Omniwombat:これは、情報のクエリ文字列の送信を扱っているため、確かに高いセキュリティのシナリオではありません。秘密の純粋な存在は、どんな「攻撃者」も捨てるでしょう。また、秘密は無期限に複雑になるように選択することができます。これにより、ハッシング・ソリューションはセキュリティのニーズに合わせて拡張できますが、その場合、ラインに沿って文字列全体を暗号化します。いずれにしても、改ざん防止のために、彼は目的地にアクセスする必要があります。 – Alex