VB2008和Android之间的加密/解密

时间:2012-04-23 07:41:42

标签: android vb.net encryption

我使用这些代码加密vb2008中的任何纯文本 我想解密并在我的Android应用程序中使用生成的文件。 我知道把文件放在assets文件夹中我会用它 此代码使用加密技术进行加密。 我如何解密我的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

1 个答案:

答案 0 :(得分:0)

这不是Android特有的,您需要使用Java JCE API翻译您的代码。基本上你会

  1. 使用MessageDigest.getInstance("SHA1")获取SHA1实施
  2. 哈希密码以获取密钥字节和IV
  3. 使用类似Cipher.getInstance("3DES/CBC/PKCS5Padding")的内容来获取3DES实现
  4. 使用密钥和IV使用Cipher.init()
  5. 初始化加密密码
  6. 使用Cipher.doFinal()
  7. 加密您的数据

    您需要确保首先获得与VB中相同的密钥和IV,然后继续加密。你似乎要在一个空字符串中进行哈希处理以获得.NET中的IV,不知道它给你带来了什么。另请检查.NET文档以检查TripleDESCryptoServiceProvider的默认填充是什么。