मुझे .net core 3.1 में RIPEMD160 का कोई कार्यान्वयन नहीं मिल रहा है।

RIPEMD160 के लिए MS दस्तावेज़ नेट मानक, कोर 3.1, कोर 5.0 के लिए मौजूद नहीं है।

System.Security.Cryptography में मुझे इससे संबंधित कुछ भी नहीं मिला।

तृतीय पक्ष पैकेज देखने से पहले (शायद चिल्कट) मैं एक का उपयोग करने का प्रयास करना चाहूंगा ढांचा पुस्तकालय।

1
Alex 75 26 पद 2020, 17:59

2 जवाब

सबसे बढ़िया उत्तर

माइक्रोसॉफ्ट ने .NET कोर में हैशिंग और क्रिप्टो एल्गोरिदम के "प्रबंधित" (पूरी तरह से .NET में कार्यान्वित) कार्यान्वयन को हटाने का फैसला किया (मुझसे पूछें क्यों नहीं)। उदाहरण के लिए देखें https://github.com/dotnet/runtime/issues/2094 (यह बिल्कुल RIPEMD160 के बारे में है):

RIPEMD160 एक एल्गोरिथ्म नहीं है जो OS क्रिप्टो परतों द्वारा प्रदान किया गया है, और .NET कोर अब क्रिप्टोग्राफ़िक एल्गोरिदम के प्रबंधित कार्यान्वयन को वहन नहीं करता है।

और msdn से:

*प्रबंधित कक्षाओं सहित सभी हैश एल्गोरिथम और हैश-आधारित संदेश प्रमाणीकरण (एचएमएसी) कक्षाएं, ओएस पुस्तकालयों के लिए स्थगित हैं। जबकि विभिन्न ओएस पुस्तकालय प्रदर्शन में भिन्न होते हैं, उन्हें संगत होना चाहिए।

मुझे नहीं पता कि इस बारे में कोई चर्चा हुई थी, या अगर किसी प्रबंधक ने फैसला किया कि इस तरह से करना सबसे अच्छा है या क्या।

एक सरल उपाय यह है कि .NET 4.7/.NET 4.8 में उपयोग किए गए कोड को पकड़ें और इसे सीधे उपयोग करें:

https://github.com/microsoft/referencesource/blob/master/mscorlib/system/security/cryptography/ripemd160managed.cs

कोड एमआईटी के रूप में सोर्स किया गया है, इसलिए लाइसेंसिंग की कोई समस्या नहीं है, होमपेज देखें:

इस रिपॉजिटरी की फाइलें एमआईटी लाइसेंस के तहत लाइसेंस प्राप्त हैं जब तक कि फाइल हेडर में अन्यथा निर्दिष्ट न हो। यदि फ़ाइल हेडर में केवल कॉपीराइट हेडर है (उदाहरण के लिए, "कॉपीराइट (सी) माइक्रोसॉफ्ट कॉर्पोरेशन। सभी अधिकार सुरक्षित।", आप संबंधित फ़ाइल को एमआईटी-लाइसेंस प्राप्त मान सकते हैं।

1
xanatos 26 पद 2020, 18:59

मैंने कुछ कक्षाओं को System.Security से कॉपी करना शुरू किया। .क्रिप्टोग्राफी लेकिन क्योंकि अन्य वर्गों/इंटरफेस पर कई विशेषताएं और निर्भरताएं हैं, मुझे वह समाधान पसंद नहीं है।
क्योंकि चिलकट थोड़ा पुराना लगता है (नेटस्टैंडर्ड 1.3) और प्रोजेक्ट में मैं पहले से ही BouncyCastle तो अंत में मैंने अभी यह लिखा है:

type RIPEMD160 () =
    static member ComputeHash (bytes: byte array) =
        let hasher =  Org.BouncyCastle.Crypto.Digests.RipeMD160Digest()
        hasher.BlockUpdate(bytes, 0, bytes.Length)
        let hash:byte array = Array.zeroCreate (hasher.GetDigestSize())
        hasher.DoFinal(hash, 0) |> ignore
        hash
0
Alex 75 27 पद 2020, 20:51