. Net sha1 karma bir bayt dizisi ve php sha1 () bir dize istiyorsa bekliyorsa, ben sonuçları eşleşebilir?

3 Cevap ûnet

Ben bir SHA1 karma uygulamak istediğiniz bayt bir dizi var. Bir hash. Net, PHP, diğer olacak. Sonra onlar maç olmadığını görmek için test edeceğiz.

. Net, bir bayt dizisi oluşturmak ve sha.ComputeHash () kullanabilirsiniz.

byte[] data = new byte[DATA_SIZE];
byte[] result; 

SHA1 sha = new SHA1CryptoServiceProvider(); 
// This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data);

PHP, sen ($ string) SHA1 diyoruz.

Ben kodu. Net tarafı hakkında bir şey yapamam, ama nasıl PHP dışında aynı karma söyledi. Net üretecektir alabilirim?

Lütfen dikkat: SADECE Bu PHP tarafında çalışabiliyorum. . Net şeyler sabittir ve değiştirilemez. Teşekkürler!

3 Cevap

SHA1 ortak, standart bir algoritma olduğu için. NET'te olduğu gibi, PHP içinde aynı şekilde uygulanır. Farklı tek parçası iki işlevi çağırmak nasıl.

Teknik olarak, SHA1 bayt yerine dizeleri üzerinde tanımlanan, ancak bayt ve karakterler sizin SHA1 algoritmanın açısından değiştirilebilir olmalı yani (Yanılıyorsam beni düzeltin) PHP dizeleri, tek baytlık karakterler ile çalışmak.

Siz ikili sizin dize değeri aynı sırayla. NET'in byte dizisi olarak aynı olduğundan emin olmak gerekir. Ben bir PHP adam değilim, bu yüzden bunu yapmak için nasıl başkasının cevap almak gerekecek.

Sha1 fonksiyonu onaltılık gösterimde olan bir bayt dizisi alır gibi görünüyor. Eğer iki bayt, FA ve A1 olsaydı Yani, dize "FAA1" olacaktır.

Sonra, geri bayt içine sonuç dizesini ayrıştırmak ve. NET çıkışı ile karşılaştırmak istiyorsunuz.

(Her bayt üzerinde ToString için çağrı "x2" biçimini kullanın ve hep birlikte append) yerine kolayca aynı formatta. NET'te bu dize oluşturmak olabileceğini unutmayın.

Bu benim için çalışıyor:

string str = user.Salt + pepper + password;
SHA1 sha1 = new SHA1CryptoServiceProvider();
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] input = encoder.GetBytes(str);
byte[] hash = sha1.ComputeHash(input);
string hashStr = "";
for (int i = 0; i < hash.Length; i++)
     hashStr += hash[i].ToString("X").ToLower();
if (hashStr != user.Hash)
     return false;