相当于加密流。NET在Java 安卓中的应用?
Tengo las siguientes函数在C#中包含字符串,在java中包含不匹配的密钥初始向量
我有以下函数用于C#中字符串的加密和解密。我需要用同样的密钥和initvector在Java中解密它
public const string PASS_PHRASE = "123456789";
private const string initVector = "pemgail9uzpgzl88";
private const int keysize = 256;
public string EncryptString(string plainText)
{
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector);
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
PasswordDeriveBytes password = new PasswordDeriveBytes(PASS_PHRASE, null);
byte[] keyBytes = password.GetBytes(keysize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] cipherTextBytes = memoryStream.ToArray();
memoryStream.Close();
cryptoStream.Close();
return Convert.ToBase64String(cipherTextBytes);
}
public string DecryptString(string cipherText)
{
if (string.IsNullOrEmpty(cipherText)) return null;
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
PasswordDeriveBytes password = new PasswordDeriveBytes(PASS_PHRASE, null);
byte[] keyBytes = password.GetBytes(keysize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}
# 1 楼答案
这是我在Java项目中用于加密/解密的一些代码。它使用AES作为加密算法,但您应该能够找出将其与其他算法一起使用所需的更改。此外,base64的编码/解码也在这些方法之外进行
在任何情况下,您都可以在这里找到越来越多的具体信息: https://docs.oracle.com/javase/7/docs/api/javax/crypto/package-summary.html