Boa*_*rdy 4 c# java encryption cryptostream
我正在寻找用Java开发移动平台操作系统的应用程序.
我已经在C#WPF中为Windows环境开发了一个应用程序.我使用cryptostream以使用以下代码加密和解密字符串.下面显示的代码只是加密
public string encrypt(string encryptionString)
{
byte[] clearTextBytes = Encoding.UTF8.GetBytes(encryptionString);
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
MemoryStream ms = new MemoryStream();
byte[] rgbIV = Encoding.ASCII.GetBytes("ryojvlzmdalyglrj");
byte[] key = Encoding.ASCII.GetBytes("hcxilkqbbhczfeultgbskdmaunivmfuo");
CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
cs.Write(clearTextBytes, 0, clearTextBytes.Length);
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
加密的字符串存储在在线数据库中.我需要做的是让java应用程序能够从数据库中读取字符串并使用C#应用程序中的相同加密密钥解密字符串.
谢谢你的帮助.
就个人而言,我喜欢BouncyCastle for Java加密.这段代码(使用BouncyCastle轻量级API)可以解决这个问题:
String decrypt(byte[] cryptoBytes, byte[] key, byte[] iv) {
BlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESEngine()));
cipher.init(false, new ParametersWithIV(new KeyParameter(key), iv));
byte[] out = new byte[cipher.getOutputSize(cryptoBytes.length)];
int offset = cipher.processBytes(cryptoBytes, 0, cryptoBytes.length, out, 0);
cipher.doFinal(out, offset);
return new String(out);
}
Run Code Online (Sandbox Code Playgroud)
我发现BouncyCastle的轻量级API比JCE提供程序的东西更少痛苦,但如果你愿意,你可以将它作为提供者使用.
它看起来像.net SymmetricAlgorithm和BC PaddedBufferedBlockCipher默认为PKCS7填充,所以你应该可以使用默认值.