2011-12-21 65 views
0

我使用下面的算法来加密和解密在VB.NET字符串和想做同样的方法在Android中也。谁能告诉我,类似的算法为Android(Java)的从VB.NET转换加密算法为Java(Android版)

加密:

Private Function decryptStr(ByVal key As String, ByVal enc As String) As String 
    Try 
     DES.Key = Hash.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key)) 
     DES.Mode = System.Security.Cryptography.CipherMode.ECB 
     Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = DES.CreateDecryptor 
     Dim Buffer As Byte() = Convert.FromBase64String(enc) 
     respass = System.Text.ASCIIEncoding.ASCII.GetString(DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length)) 
     Return respass 
    Catch ex As Exception 
     Return enc 
    End Try 
End Function 

解密:

Public Function decryptStr(ByVal encrypted As String, ByVal key As String) As String 
    Try 
     DES.Key = Hash.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key)) 
     DES.Mode = System.Security.Cryptography.CipherMode.ECB 
     Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = DES.CreateEncryptor 
     Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(encrypted) 
     respass = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length)) 
     Return respass 
    Catch ex As Exception 
     Return encrypted 
    End Try 
End Function 
+1

只要有一个看[此](http://stackoverflow.com/questions/5220761/fast-and-simple-string-encrypt-decrypt-in-java)。 – 2011-12-21 07:09:09

+0

使用哪种哈希算法(请参阅“哈希”变量的初始化)? – Robert 2011-12-21 09:05:17

回答

0
  1. 对于密码,使用Cipher.getInstance("DES/ECB/PKCS5Padding")
  2. 对于获取要在哈希函数中输入的字节得到密钥,反过来使用String.getBytes(key, Charset.forName("ASCII"))new String(keyData, Charset.forName("ASCII"))
  3. 使用(尚未指定的)散列函数。请确保将密钥大小设置为8个字节,因为DES只需要密钥的8个字符。像MessageDigest.getInstance("MD5")"SHA1"应该做的伎俩。
  4. 通过简单地执行new SecretKeySpec(<my 8 byte byte array>, "DES")
  5. Base64编码创建密钥/解码是不是默认安装的,看到从Apache的公地编解码器来做到这一点。

如果你在几个地方使用的字符编码,只需创建一个常数:

private static final Charset ASCII = Charset.forName("ASCII"); 

得到一个字节数组的一部分的新的和改进的方法是:

Arrays.copyOfRange(byte[] original, int from, int to): byte[]