2010-04-20 2 views
1

Rijndael은 새로운 소프트웨어에 사용할 암호화 된 라이센스 문자열을 생성하려고 노력하고 있으므로 고객이 지불 한 것과 동일한 금액의 앱을 사용하고 있습니다. 두 가지 일을합니다.VB.NET에서 Rijndael 개체 사용

  1. 사용자 컴퓨터 이름 가져 오기.

  2. 나는 다음 두 가지를 결합하고, 라이센스 번호로 (이것은 아마도 최종 버전에서 변경됩니다 사용

100과 1000000000 사이의 임의의 숫자를 추가

,하지만 난 뭔가를하고 있어요 데모 용으로 간단 함). 마법이 일어나는 곳 내로드 이벤트,하지만 여기

Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim generator As New Random 
    Dim randomValue As Integer 
    randomValue = generator.Next(100, 1000000000) 


    ' Create a new Rijndael object to generate a key 
    ' and initialization vector (IV). 
    Dim RijndaelAlg As Rijndael = Rijndael.Create 

    ' Create a string to encrypt. 
    Dim sData As String = My.Computer.Name.ToString + randomValue.ToString 
    Dim FileName As String = "C:\key.txt" 

    ' Encrypt text to a file using the file name, key, and IV. 
    EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV) 

    ' Decrypt the text from a file using the file name, key, and IV. 
    Dim Final As String = DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV) 

    txtDecrypted.Text = Final 


End Sub 

:

Sub EncryptTextToFile(ByVal Data As String, ByVal FileName As String, ByVal Key() As Byte, ByVal IV() As Byte) 

    Dim fStream As FileStream = File.Open(FileName, FileMode.OpenOrCreate) 
    Dim RijndaelAlg As Rijndael = Rijndael.Create 
    Dim cStream As New CryptoStream(fStream, _ 
            RijndaelAlg.CreateEncryptor(Key, IV), _ 
            CryptoStreamMode.Write) 
    Dim sWriter As New StreamWriter(cStream) 

    sWriter.WriteLine(Data) 
    sWriter.Close() 
    cStream.Close() 
    fStream.Close() 



End Sub 

내가 이해하지 못하는 몇 가지가 여기에

는 일부 샘플 codez입니다. 누군가가 텍스트 파일을 읽고 Rijndael이라는 것을 인식하고 그것을 해독하는 VB 또는 C# 응용 프로그램을 작성하면 어떻게 될까요? 나는이 모든 것을 정말로 이해하지 못한다. 너희들이 나를 도울 수 있다면 너를 영원히 사랑할 것이다. 사전

답변

2

매우 기본적인 문제가 발생했습니다. 데이터를 암호화하기는 쉽지만 키를 전송하는 방법은 무엇입니까?

비대칭 암호화 (RSA)를 살펴보면 서명 된 어셈블리와 유사한 서명을 추가 할 수 있습니다.

매우 최상위 설명 :

  1. 당신은 키 쌍 (공개 키와 개인 키) 1 시간을 생성합니다. 개인 키는 비밀로 유지하십시오.
  2. UserName을 가져 와서 해시하고 개인 키로 해시를 암호화합니다.
  3. 라이선스 파일의 일부로 암호화 된 해시 (서명)를 고객에게 보냅니다.
  4. 프로그램에서 (공개 된) 공개 키를 사용하여 서명을 디코딩합니다.
  5. 프로그램이 로컬 사용자 이름을 해쉬하고 디코드 된 버전과 비교합니다.
  6. 귀하의 프로그램은 라이센스가 부여되었는지 여부를 결정하고 그에 따라 작동합니다.

해시는 암호화 할 바이트 수를 제한하는 데 사용됩니다. 사용자 이름의 경우 필요한 모든 데이터 (예 : 사용자 이름 + 종료 날짜)로 대체 할 수 있습니다.

+0

좋습니다. 예를 들어 "omg"와 같은 키를 설정하면 "omg"키를 가진 사람들 만이 이것을 해독 할 수 있습니까? – broke

+0

흠 조금 혼란 스럽지만 좀 더 연구를 해보겠습니다. 그래도 조언 주셔서 감사합니다! – broke

1

메소드 EncryptTextToFile에서

덕분에 그냥시키는 CryptoStream 클래스와 것은 RijndaelManaged 알고리즘을 사용하여 문자열을 암호화합니다. TripleDES과 같은 다른 알고리즘도 사용할 수 있습니다.

사람들이 코드를 해독하는 방법은 항상 있습니다. 한 가지 할 수있는 건 레지스트리에 키 (Rjindael)를 저장하거나 응용 프로그램이 처음 설치 될 때 데이터베이스에 저장하는 것입니다.

+0

사람들이 나중에 암호 해독 할 수 있다면 그것을 암호화하는 요점은 무엇일까요? TripleDES가 더 나은 옵션입니까? – broke

+0

아니야. 암호화의 요점은 사용자의 95 %가 암호 해독을 신경 쓸 필요가 없다는 것입니다. 나머지 5 % 우리는 정말로 걱정해서는 안됩니다. 어쨌든 그들은 당신의 소프트웨어에 대해 지불하지 않을 것입니다. –

1

당신이하고 싶은 것을 이해하지 못하는 몇 가지 문제가 있습니다. 예를 들어 암호화 된 값 (임의의 숫자 포함)을 어떻게 사용할 계획입니까?

나는 그것이 사용자의 컴퓨터에 해시 된 문자열을 저장하는 대신 필요할 때보 다 복잡해지고 있다고 생각합니다. 해시는 (정의에 따라) 한 가지 방법입니다. 즉, 해시 할 수 없습니다.

편집 :

좋아, 귀하의 질문에 고집 - 현재 상황을, 당신은 암호화 키를 저장하는 것 같다니까. 나중에 암호 해독하는 것은 꽤 불가능합니다. 암호 해독은 사용자가 키를 알고있는 경우에만 가능하므로 사용자는 동일한 곤경에 빠지며 키없이 해독 할 수 없습니다. 나는 꽤 안전하다고 말하고 싶지만, 그 값을 사용하면 약간의 문제가있을 수 있습니다!

+0

나는 그것을 어떻게 사용할지 결정하지 않았고, 나는 단지 그것을 안전하기를 바란다. – broke

+0

저장 키와 암호화 키는 어떻게 저장합니까? – broke