Преобразовать алгоритм шифрования из VB.NET в Java (Android) - PullRequest
0 голосов
/ 21 декабря 2011

Я использую следующий алгоритм для шифрования и дешифрования строки в VB.NET и хотел сделать тот же метод в Android также.Может кто-нибудь сказать мне аналогичный алгоритм для Android (Java)

Шифрование:

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 Ответ

0 голосов
/ 22 декабря 2011
  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. Кодирование / декодирование Base 64 не установлено по умолчанию, посмотрите на общиекодек от Apache для этого.

Если вы используете кодировки символов в нескольких местах, просто создайте константу:

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

Новый и улучшенный способ получения части байтамассив:

Arrays.copyOfRange(byte[] original, int from, int to): byte[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...