C# 安卓ANSIX923密码填充

C# 安卓ANSIX923密码填充,c#,android,C#,Android,我正在尝试制作一个连接到数据库的android应用程序,有不同的用户,他们都有加密的密码。我创建了一个用于连接数据库的C#应用程序,它还使用以下算法创建这些密码: String PKey = "key"; int intLenght = textBox1.Text.Length - 1; string NewString = null; NewString = textBox1.Text; byte[] key

我正在尝试制作一个连接到数据库的android应用程序,有不同的用户,他们都有加密的密码。我创建了一个用于连接数据库的C#应用程序,它还使用以下算法创建这些密码:

        String PKey = "key";
        int intLenght = textBox1.Text.Length - 1;
        string NewString = null;


        NewString = textBox1.Text;

        byte[] keyArray;
        byte[] ToEncryptArray = UTF8Encoding.UTF8.GetBytes(NewString);
        MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
        keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(PKey));
        hashmd5.Clear();
        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
        tdes.Key = keyArray;
        tdes.Mode = CipherMode.EBC;
        tdes.Padding = PaddingMode.ANSIX923;
        ICryptoTransform cTransform = tdes.CreateEncryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(ToEncryptArray, 0, ToEncryptArray.Length);
        tdes.Clear();
        string res = System.Convert.ToBase64String(resultArray, 0, resultArray.Length);

        textBox2.Text = res;
我已经在android中复制了这一点,如下所示:

try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] hash = md.digest(PKey.getBytes("UTF-8")); // <-- note encoding
        byte[] toEncryptByte = encString.getBytes("UTF-8");
        Cipher cipher = Cipher.getInstance("DESEDE/EBC/X9.23PADDING");
        SecretKeySpec myKey = new SecretKeySpec(hash,"DESede");
        cipher.init(Cipher.ENCRYPT_MODE, myKey);
        byte[] encryptedPlainText = cipher.doFinal(toEncryptByte);

        String encrypted = Base64.encodeToString(encryptedPlainText, 0);

        return encrypted;


    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e){
        e.printStackTrace();
    } catch (InvalidKeyException e){
        e.printStackTrace();
    } catch (IllegalBlockSizeException e){
        e.printStackTrace();
    } catch (BadPaddingException e){
        e.printStackTrace();
    }

    return null;
}
我试图避免更改C#中的填充模式或密码模式,因为我必须替换所有密码

作为测试,我尝试了PKCS7填充,这两种填充都有效

android是否存在EBC ANSIX923填充


谢谢

不要加密密码,当攻击者获得DB时,他也将获得加密密钥。用随机盐在HMAC上迭代大约100毫秒,并用散列保存盐。使用诸如
password\u hash
/
password\u verify
PBKDF2
(又称
Rfc2898DeriveBytes
)、
Bcrypt
等函数和类似函数。关键是让攻击者花费大量时间通过暴力手段查找密码。加密密码。2.3DES。3.欧洲央行模式。4.ANSIX923填充。用户的安全性非常重要,需要当前的最佳实践。先生,请告诉我们最佳做法好吗?
No provider found for DESEDE/EBC/X9.23PADDING