2010-05-31 10 views
5

değişti, bütün kod derlenmiş, tüm testler geçti.
Ardından, evreleme ortamımın dağıtımıyla ilgili bir soruna rastladım.
Aniden girişlerim artık çalışmıyordu.SHA1CryptoServiceProvider Şu anda .NET 3.5 kadar herşey çok iyi gidiyordu .NET 4.0</p> <p>için benim bir projeye yükseltmek için çalışıyorum .NET 4

Benim SHA1 karma şifreleri Ben SHA1CryptoServiceProvider kullanıyorum .NET 4.

farklı karma ediliyor görünüyor:

SHA1CryptoServiceProvidercryptoTransformSHA1 = new SHA1CryptoServiceProvider(); 

Ben 2 konsol uygulamaları ile yeni bir Visual Studio proje oluşturduktan test etmek için.
.NET Framework 3.5 ve ikincisi 4.0'da hedeflenen ilk.
Her ikisinde de aynı karma koduyla çalıştım ve farklı sonuçlar üretildi.

Bu neden oluyor ve bunu nasıl düzeltebilirim?
Açıkçası, tüm kullanıcı şifrelerinizi güncelleme yapıyorum, çünkü ne olduğunu bilmiyorum.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır. o karakter kodlama sorun olabilir gibi

KOD NUMUNE

public static class SHA1Hash 
{ 

    public static string Hash(string stringToHash) 
    { 
     return (Hash(stringToHash, Encoding.Default)); 
    } 

    public static string Hash(string stringToHash, Encoding enc) 
    { 
     byte[] buffer = enc.GetBytes(stringToHash + stringToHash.Reverse()); 
     var cryptoTransformSHA1 = new SHA1CryptoServiceProvider(); 
     string hash = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)); 
     return hash; 
    } 
} 
+0

([Giriş 3.5 ila ASP.net 4.0'a yükseltmeden sonra başarısız] olası yinelenen http://stackoverflow.com/questions/2739196/login -fails-sonrası yükseltmesi-arası asp-net-4-0-den-3-5) - çözüm –

+0

dahil ne yazık ki bu aynı durum böyle değildir. Bu FormsAuthenticationCookies ilgili olduğu ve "Sen ASP.NET 2.0/ASP.NET 4 karışık çalıştırırsanız" ViewState ve sadece bir sorundur. Ama DANG Bunun benim çözümüm olduğunu düşündüm – WebDude

+0

AsymetricHash/Hash karışıklığını temizleyebilir misin? Sadece güvenli olmak için. –

cevap

2

biri üzerine götürdü kodu kodumda bulmak.
Paylaşılacak bayt dizilimimi oluştururken, dizeyi tersine çevrilmiş bir sürümüyle eklemeyi deniyordum.

E.g. Aslında "passworddrowssap" Benim kod içinde hafif bir hata vardır Ancak

karma olacağını hash "şifre" verilir:

.reverse() bir dize tersine çevirebilen bir Linq uzantısı yöntemidir.
Ancak bir dize dönmez, bu döndürür:

IEnumerable<Char> 

bu tür .ToString() çağrılması aslında döndürür:

System.Linq.Enumerable + d__99`1 [Sistemi. .NET 4.0 getiri

S aynı şeyi yapmak Char]

ystem.Linq.Enumerable + d__a0`1 [System.Char]

Dolayısıyla Parolalarım farklı karma ediliyordu.Ben bayt dizisi tarafından yaratmak için yapılması gereken ne
oldu:

byte[] buffer = enc.GetBytes(stringToHash + new String(stringToHash.Reverse().ToArray())); 
0

geliyor. karma edilen dize kodlama olduğundan emin olun [utf8, ansi vs] Beklediğiniz (ve eğer eski ortam çok olduğundan emin olun.) yorumların

-Oisin

+0

Encoding.Default kullanıyorum. Ben - Encoding.ASCII, Encoding.BigEndianUnicode, Encoding.Unicode, Encoding.UTF32, Encoding.UTF7, Encoding.UTF8 – WebDude

+0

karma bayt akışı düzeyinde çalışır: Bir Kodlama ve çalışmış Aşağıdakilerden hiçbiri belirterek çalıştı beni anladığından emin değilsin. Kodlamayı nerede belirliyorsunuz? Tüm önemli olan, her iki sistemin de aynı _bytes_'ı sha1 sınıfına beslediği doğrulandı. – x0n

+0

lütfen aradığım yöntem olan kod örneğine bakın. Ben kodlama değiştirerek olacaktır nerede emin değilim bu yüzden Her iki site aynı sunucuda çalıştırıyorsunuz. Her iki sistemin de sha1 sınıfına aynı baytları beslediğini nasıl doğrulayabilirim? Yukarıdaki kod örneğime göre , buffer.Length'u kontrol edebilir miyim? – WebDude