hashlibをPythonからc#に移植する方法

私はPythonからC#にhashlibライブラリを移植しようとしています:

shaA = hashlib.sha256()
        shaA.update(yy)     
        shaA.update(xx)
        shaB = shaA.copy()
        hashA = shaA.digest()

        #Hash B
        shaB.update(yy)
        shaA = shaB.copy()
        hashB = shaB.digest()

        #Hash C
        shaA.update(xx)
        hashC = shaA.digest()

私の問題は、.NETでSHA256()の意味でupdate()が何を意味しているのか、そして(.NETのdoes notサポートである)SHA256が消化して消化するということです。

もし誰かがそれで私を助けることができれば、私は感謝以上のものになるでしょう!

ありがとう

0

2 答え

私は、あなたのサンプルコードがこれとほぼ同じであることは確かではありませんが、テストされていません。

byte[] hashA, hashB, hashC;

using (var sha = new SHA256Managed())
{
    hashA = sha.ComputeHash(Encoding.UTF8.GetBytes(yy + xx));
    hashB = sha.ComputeHash(Encoding.UTF8.GetBytes(yy + xx + yy));
    hashC = sha.ComputeHash(Encoding.UTF8.GetBytes(yy + xx + yy + xx));
}

さまざまなPythonメソッドについては、 hashlib のドキュメントで説明しています。

copy makes a clone of the hash object's current state; update appends a new string onto the hash object's existing input string; digest generates the hash (aka, message digest) from the hash object's existing input string and returns it as a sequence of bytes.

.NETやC#で私が認識している同等のものはありません。正に言えば、 hashlib の移植ではあまり価値はないようです。私の意見では、組み込みの.NETハッシュライブラリを使用すると、より短く理解しやすいコードが得られます。

3
追加された
@CodeInChaos抽象概念について聞いたことがありますか?ライブラリ全体を移植するよりもずっと少ない作業です。
追加された 著者 the_drow,
私の経験では、組み込みのハッシュライブラリは非常に醜いコードにつながります。 update digest メソッドを持つことは、.net同等のメソッドよりもはるかにクリーンなIMOに見えます。コピーがない場合(その機能が必要な場合)はおそらく非常に高価です。
追加された 著者 CodesInChaos,
@the_drow私はライブラリを移植することは良いアイデアだとは言いませんでした。しかし、LukeH氏は、「組み込みの.NETハッシュライブラリを使用すると、わかりやすくわかりやすいコードを得ることができます。私の経験に合わないもの。上記のPythonコードに対応する.netコードは大いに醜いです。もちろん、問題を解決する正しい方法は、いくつかのヘルパーメソッドであり、Pythonの完全なライブラリポートではありません。
追加された 著者 CodesInChaos,

.NETフレームワークに暗号化ライブラリが含まれていることはご存じですか?
.NET用の SHA256 実装は次のとおりです。 これは暗号ライブラリの概要です。

.NET暗号化ライブラリを使用する際に問題がある場合は、ライブラリ全体を移植する代わりに、C#で必要なものを実装する方法があるかどうかを調べる必要があります。

0
追加された