2010-03-12 8 views
8

मैं एक एन्क्रिप्शन नौसिखिया हूं जो सिस्टम के बीच आगे और कुछ मूल्यों को पारित करने की कोशिश कर रहा है। मैं मान एन्क्रिप्ट कर सकता हूं, लेकिन दूसरे छोर पर डिक्रिप्ट करने का तरीका नहीं लग रहा है। मैंने VB.NET का उपयोग करके एक साधारण विंडोज फॉर्म एप्लिकेशन बनाया है। एक मान और कुंजी इनपुट करने की कोशिश कर रहा है, एन्क्रिप्ट करें और फिर मूल मान प्राप्त करने के लिए डिक्रिप्ट करें। अब तक मेरा कोड यहाँ है। किसी भी मदद की बहुत सराहना की। धन्यवाद।HMACSHA1 से एन्क्रिप्टेड स्ट्रिंग को कैसे डिक्रिप्ट करें?

Imports System 
Imports System.IO 
Imports System.Security.Cryptography 
Imports System.Text 

Public Class Form1 

    Private Sub btnEncode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEncode.Click 
     Dim hmacsha1 As New HMACSHA1(Encoding.ASCII.GetBytes(txtKey.Text)) 
     Dim hashValue As Byte() = hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(txtValue.Text)) 
     txtResult.Text = BytesToHexString(hashValue) 
     hmacsha1.Clear() 
    End Sub 

    Private Sub btnDecode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecode.Click 
     '??? 
    End Sub 

    Private Function BytesToHexString(ByVal bytes As Byte()) As String 
     Dim output As String = String.Empty 
     Dim i As Integer = 0 
     Do While i < bytes.Length 
      output += bytes(i).ToString("X2") 
      i += 1 
     Loop 
     Return output 
    End Function 
End Class 

उत्तर

16

HMAC-SHA1 में वन-वे hash, नहीं एक द्विदिश encryption एल्गोरिथ्म है। आप इसे डिक्रिप्ट नहीं कर सकते। मेरे पास पूर्ण एन्क्रिप्शन कोड प्रदान करने का समय नहीं है - यह एक जटिल विषय है, लेकिन बैरी डोर्रान '"Beginning ASP.NET Security" आपको एक अच्छा प्रारंभिक बिंदु देगा। (केवल कुछ ही एएसपी.नेट-विशिष्ट है।) आप विषय पर DDD talk भी देख सकते हैं।

+0

जानकारी के लिए धन्यवाद, जॉन। –

+2

शा -1 एक तरफा हैश है। एचएमएसी-एसएचए 1 एक संदेश प्रमाणीकरण कोड है। वे स्पष्ट रूप से एक ही बात नहीं हैं। यह वास्तव में थोड़ा और सटीक होने में मदद करेगा। – Accipitridae

+0

* यह एक जटिल विषय है * - रिकॉर्ड के लिए, hmac_hash कार्यान्वयन [विकिपीडिया पर] के लिए कोड और छद्म कोड है (http://en.wikipedia.org/wiki/Hash-based_message_authentication_code)। – automaton

21

बस जॉन के जवाब पर विस्तार करने के लिए, क्योंकि आप शायद सोच रहे हैं कि बिंदु कुछ एन्क्रिप्ट करने का तरीका है जिसे आप डिक्रिप्ट नहीं कर सकते हैं - एचएमएसी-एसएचए 1 है, जैसा कि जॉन ने कहा है, एक हैश। उत्पादित स्ट्रिंग में मूल जानकारी नहीं होती है, यहां तक ​​कि एन्क्रिप्टेड रूप में भी ... यह केवल बाइट्स का अनुक्रम है।

हैश की सुंदरता यह है कि स्ट्रिंग में आप जो भी बदलाव कर सकते हैं, वह निश्चित रूप से हैश परिणाम में बदलाव का परिणाम देगा, और हैश परिणाम काफी छोटा होता है। इस कारण से, हैश का उपयोग अक्सर यह सुनिश्चित करने के लिए किया जाता है कि जानकारी का एक टुकड़ा छेड़छाड़ नहीं किया गया है।

उदाहरण के लिए

,

मैं यहाँ संदेश जॉन भेजना चाहते हैं - और मैं उसे विश्वास है कि उसके साथियों में से एक संदेश से पहले अपने इसे पढ़ने के लिए नहीं बदला है होना चाहता हूँ। मैं सिर्फ अपने संदेश का हैश नहीं ले सकता हूं और इसके साथ भेज सकता हूं, क्योंकि सभी परेशानी के कारण को संदेश को अपने आप में से एक के साथ बदलना होगा, और उचित हैश प्रदान करना होगा ...

हालांकि, अगर मैं अपने संदेश को हैश के साथ संदेश भेजता हूं, लेकिन कुछ विशिष्ट अतिरिक्त बाइट्स के संदेश के बजाय जो जॉन और मैं पहले से सहमत हैं, परेशानी निर्माता हार गया है। जॉन मेरे संदेश को छोड़ने से पहले अतिरिक्त बाइट्स (आमतौर पर हैश को सलाम करने के रूप में जाना जाता है) को जोड़ना जानता है, लेकिन मुसीबत का कारण यह नहीं है - इसलिए यदि वह संदेश बदलता है, भले ही वह अपने ही हैश को काम करता है, तो जॉन कुछ देख सकता है गलत है ...

Encyryption/hashes एक बारीकियों व्यापार कर रहे हैं, और मैं मुश्किल से सतह अपने आप को खरोंच है - लेकिन मुझे लगा कि यह तुम क्या हैश के लिए ...

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

मार्टिन

+0

धन्यवाद, मार्टिन। कुछ उपयोगी जानकारी। –

+0

कोई समस्या दोस्त नहीं है ... –

2

एक साधारण एक तरह से हैश क्यों लोग यह करने के लिए चाहते हो जाएगा के रूप में explaination।

मान लें कि आपके पास उपयोगकर्ता नाम जॉन और पासवर्ड डो के साथ उपयोगकर्ता खाता है। आप निम्न स्ट्रिंग के हैश को स्टोर करते हैं।

प्रथम नाम, अपने पसंदीदा संख्या, और उनके चयनित पासवर्ड

उदाहरण के लिए

: हैश = myHash ("john7 पासवर्ड @")

   now hash = "qk239qa*@$)(*84509053903" or whatever 

अब जब कि हैश सुरक्षित है और करने के लिए वापस उलट नहीं जा सकता पता लगाएं कि ज्यादातर मामलों में आपका पसंदीदा नंबर क्या है। यह जांचने के लिए कि हैश लॉग इन करने के लिए सही है या नहीं, आप आपूर्ति किए गए इनपुट (नाम, आपका नंबर या डब्ल्यू/ई, पासवर्ड) फिर से हैश करते हैं और यदि आपको वही सटीक हैश मिलता है, तो यह एक वैध सौदा है। wo0t यह पूरी तरह से सरल नहीं है!

- क्या मैं अपने डेटा को पुनः-हैश करने के लिए एक ही कुंजी का उपयोग कर सकता हूं?

संबंधित मुद्दे