>

파일을 암호화하고 싶습니다. XOR을 사용하여 암호화합니다. 그러나 문제는 암호화 할 수 있지만 해독하고 싶을 때 원래 파일이 아닌 다른 결과를 제공한다는 것입니다.

내가 사용하는 코드는 다음과 같다

Public Function Encrypt(ByVal txt As String, ByVal pass As String) As String
Dim mem() As Byte
mem = StrConv(txt, vbFromUnicode)
For i = 0 To UBound(mem)
    mem(i) = Asc(mem(i)) Xor Asc(Mid(pass, (i Mod Len(pass)) + 1, 1))
Next i
Encrypt = StrConv(mem, vbUnicode)
Erase mem
End Function
Public Function Decrypt(ByVal txt As String, ByVal pass As String) As String
Dim mem() As Byte
mem = StrConv(txt, vbFromUnicode)
For i = 0 To UBound(mem)
    mem(i) = Asc(mem(i)) Xor Asc(Mid(pass, (i Mod Len(pass)) + 1, 1))
Next i
Decrypt = StrConv(mem, vbUnicode)
Erase mem
End Function
Private Sub Form_Load()
Enkrip = Encrypt(txt.LoadFile("C:\mom.txt"), "FROM YOUR SON")
dekrip = Decrypt(Enkrip, "FROM YOUR SON")
MsgBox Enkrip & vbCrLf & dekrip
End Sub

dekrip의 값은 C : \ mom.txt의 원래 내용이어야하지만 다른 결과를 반환합니다.

<시간>

이 코드도 시도했는데 잘 작동합니다

Private Sub Form_Load()
Data = "A"
pass = "B"
enkrip = Chr(Asc(Data) Xor Asc(pass))
dekrip = Chr(Asc(enkrip) Xor Asc(pass))
MsgBox enkrip & vbCrLf & dekrip
End Sub

<시간>

코드를 수정하려면 어떻게해야합니까?

감사합니다


  • 답변 # 1

    문자열은 바이트가 아닌 문자로 구성되며 VB6 문자는 16 비트입니다. XOR 때 충돌이 발생할 수 있습니다  유니 코드와의 변환은 유니 코드 --ASCII 경계에서 패턴을 제대로 전송하지 못할 수 있기 때문에 ASCII 도메인의 두 문자 세트.

    파일을 바이트 배열로 읽어야합니다. 텍스트를 파일로 읽거나 쓸 때 발생하는 유니 코드와의 변환을 피하면서 바이트 배열로 출력합니다. 여전히 XOR 를 사용할 수 있습니다   StrConv 의  변수가 변환으로 인해 왜곡 되더라도 매번 같은 방식으로 왜곡되기 때문에 변수입니다.

    인코딩과 디코딩 사이에서 자국어 시스템을 변경하면 Pass  단계는 다른 'garbling'을 유발할 수 있으므로 실패 할 수 있습니다.

  • 답변 # 2

    XOR을 암호화에 사용하는 경우 전달 된 비트 마스크를 기반으로 비트를 뒤집는 것입니다. 따라서 암호화와 암호 해독이 필요하지 않습니다. 둘 다 동일한 작업을 수행합니다. 코드를 닦지 않았지만 두 가지 가능성이 있습니다. 하나는 두 가지 중 하나가 작동하고 다른 하나는 그렇지 않습니다. 두 번 호출하여 어느 것이 작동하는지 파악하고 암호화 방법으로 만드십시오. 둘 다 실패하면 첫 번째 매개 변수를 유니 코드로 변환하지만 두 번째 매개 변수에서 동일한 단계 (또는 가정)를 수행하지 않는 것입니다. 그것이 구문 상으로는 정확하지만, 여전히 실행 중일 것입니다. 생각했던 것을 반환하지 마십시오.

  • 답변 # 3

    실수는 당신의 실수가 있다고 생각합니다

    StrConv
    
    

    당신은 더 나은 것을 가져야합니다

    (i Mod Len(pass)) + 1)
    
    

    그리고1에서m으로0m으로 설정하면 마치 하나가되는 것처럼 보입니다. 한 걸음 더 나아가십시오.

    1에서ubound로 이동하거나0에서ubound-1

    으로 이동 1 + ((i-1) mod len(Pass))

관련 자료

  • 이전 uibutton ios에 테이블보기 공개 표시기 스타일 사용
  • 다음 python 3.x - Gensim에서는 Word2Vec 단어를 찾을 수 없지만 TensorFlow 내장 프로젝터에 표시됩니까?