-1

これらのコードを使用して、vb2008 でプレーン テキストを暗号化します。
Androidのアプリで生成されたファイルを復号化して使用したい。ファイルをアセットフォルダーに入れることを知っていて、それを使用しています。
このコードは、暗号化に暗号化を使用します。Android アプリで生成されたファイルを復号化する方法。Androidアプリでそれらをどのように使用するか。何か案が?

Imports System.Security.Cryptography

Public NotInheritable Class Simple3Des

    Private TripleDes As New TripleDESCryptoServiceProvider

    Private Function TruncateHash(ByVal key As String, ByVal length As Integer) As Byte()

        Dim sha1 As New SHA1CryptoServiceProvider

        ' Hash the key.
        Dim keyBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(key)
        Dim hash() As Byte = sha1.ComputeHash(keyBytes)

        ' Truncate or pad the hash.
        ReDim Preserve hash(length - 1)
        Return hash
    End Function

    Sub New(ByVal key As String)
        ' Initialize the crypto provider.
        TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8)
        TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8)
    End Sub

    Public Function EncryptData(ByVal plaintext As String) As String

        ' Convert the plaintext string to a byte array.
        Dim plaintextBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(plaintext)

        ' Create the stream.
        Dim ms As New System.IO.MemoryStream
        ' Create the encoder to write to the stream.
        Dim encStream As New CryptoStream(ms, TripleDes.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write)

        ' Use the crypto stream to write the byte array to the stream.
         encStream.Write(plaintextBytes, 0, plaintextBytes.Length)
         encStream.FlushFinalBlock()

        ' Convert the encrypted stream to a printable string.
        Return Convert.ToBase64String(ms.ToArray)
    End Function

    Public Function DecryptData(ByVal encryptedtext As String) As String

        ' Convert the encrypted text string to a byte array.
        Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext)

         ' Create the stream.
         Dim ms As New System.IO.MemoryStream
        ' Create the decoder to write to the stream.
        Dim decStream As New CryptoStream(ms, TripleDes.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write)

        ' Use the crypto stream to write the byte array to the stream.
        decStream.Write(encryptedBytes, 0, encryptedBytes.Length)
        decStream.FlushFinalBlock()

        ' Convert the plaintext stream to a string.
        Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
    End Function

    End Class

そして私のフォームクラスで

    Sub TestEncoding()
        Dim plainText As String = InputBox("Enter the plain text:")
        Dim password As String = InputBox("Enter the password:")

        Dim wrapper As New Simple3Des(password)
        Dim cipherText As String = wrapper.EncryptData(plainText)

        MsgBox("The cipher text is: " & cipherText)
        My.Computer.FileSystem.WriteAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\cipherText.txt", cipherText, False)
    End Sub
4

1 に答える 1

0

これは Android に固有のものではなく、Java JCE API を使用してコードを変換する必要があります。基本的にあなたは

  1. MessageDigest.getInstance("SHA1")SHA1 実装を取得するために使用します
  2. キーバイトと IV を取得するためにパスワードをハッシュする
  3. Cipher.getInstance("3DES/CBC/PKCS5Padding")3DES実装を取得するようなものを使用してください
  4. キーと IV を使用して暗号化用の暗号を初期化します。Cipher.init()
  5. を使用してデータを暗号化するCipher.doFinal()

最初に VB と同じキーと IV を取得してから、暗号化を続行する必要があります。空の文字列をハッシュして .NET で IV を取得しているようですが、何が得られるかわかりません。また、.NET ドキュメントをチェックして、 のデフォルトのパディングが何であるかを確認してくださいTripleDESCryptoServiceProvider

于 2012-04-23T07:56:59.713 に答える