2

ドキュメントには、「次の値を使用すると、この結果が得られます」と記載されています。

ブロック サイズ: 128 暗号モード: CBC パディング モード:ゼロ

キー: BTikvHBatPdAtgT3317QIQqGFY25WpIz

IV: a5Sg4U9m11Mw2tIZ

暗号化される値: 2008-06-02 13:28:45,Statements,1234567,,06/01/2008,06/01/2008,0

これらすべての値が開発者ガイドに従って使用された後の暗号化結果は次のようになります。

b97f3985245be1065604c5808cebaa2e15813bf938cfaa3c198fd464565c13ced7c91ac6 b68326ce5ed5e81cb7de81acb9fcd1b1636127efbac3203da5bdccea

ただし、何らかの理由でこの結果を取得できません。これは、この結果を入力するために使用したコードですが、最初は同じ文字が表示され、後で文字が変更されるため、この質問の一番下の結果に表示されることがあります。

これがコードで、以下が新しい出力です。

public static void Main(string[] args)
{
  RijndaelManaged rij = new RijndaelManaged();
  rij.Mode = CipherMode.CBC;
  rij.Padding = PaddingMode.Zeros;
  rij.Key = ASCIIEncoding.UTF8.GetBytes("BTikvHBatPdAtgT3317QIQqGFY25WpIz");
  rij.IV = ASCIIEncoding.UTF8.GetBytes("a5Sg4U9m11Mw2tIZ");
  ICryptoTransform transform = rij.CreateEncryptor();

  byte[] data = Encoding.ASCII.GetBytes("2008-06-02 13:28:45,Statements,1234567,,06/01/2008,06/01/2008,0");
  byte[] result = transform.TransformFinalBlock(data, 0, data.Length);
  Console.WriteLine(ByteArrayToString(result));
}

public static string ByteArrayToString(byte[] ba)
{
  StringBuilder hex = new StringBuilder(ba.Length * 2);
  foreach (byte b in ba)
    hex.AppendFormat("{0:x2}", b);
  return hex.ToString();
}

私の出力:

b97f3985245be1065604c5808cebaa2e15813bf938cfaa3c198fd464565c13ced7c91ac6b68326ce5ed5e81cb7de81ac

注:先に進んでより良い解決策を見つけたので、質問を更新する必要がありましたが、新しい問題が現在発生しています。

4

2 に答える 2

2

あなたは出力の奇妙な文字について話していました-実際、あなたが投稿した出力は16進エンコードなので、ここで説明するように、あなたもあなたの出力を16進にエンコードしてみるべきです。

編集:

私は今それを理解しました。さらに、ストリームまたはライターのいずれかを追加する必要がありClose()ます。CBCモードでは、これは最後のブロックのパディングを完了するために必要です。省略した場合、最後のブロックは出力されません。次の問題は、これを行った場合でも、例で期待されているものとはわずかに異なる出力になってしまうことです。理由は次のとおりです。サンプルの暗号文を復号化すると、次のようになります。

2008-06-02 13:28:45,Statements,1234567,,06/01/2007,06/01/2007,0

平文とは異なり、2008年の最後に2007があります。これを修正してストリームを適切に閉じると、最終的に例とまったく同じ出力が得られます。

于 2012-05-19T00:42:27.527 に答える
2

あなたが持っているこのキーと IV は、base64 エンコーディングのように見えます...

rij.Key = Convert.FromBase64String("BTikvHBatPdAtgT3317QIQqGFY25WpIz");
rij.IV = Convert.FromBase64String("a5Sg4U9m11Mw2tIZ");
于 2012-05-19T00:38:09.763 に答える