C# C语言中的3DES加密和现有Java应用程序中的解密
我试图用C编写一个加密函数,生成一个可以在Java应用程序中解密的字符串。我从客户端收到的现有Java解密代码:C# C语言中的3DES加密和现有Java应用程序中的解密,c#,java,compatibility,3des,C#,Java,Compatibility,3des,我试图用C编写一个加密函数,生成一个可以在Java应用程序中解密的字符串。我从客户端收到的现有Java解密代码: public static String encryptParameters(byte plainText[], String sKey) throws RCPCipherException { Cipher cipher; DESedeKeySpec dks = new DESedeKeySpec(_getKeyBytes(s
public static String encryptParameters(byte plainText[], String sKey)
throws RCPCipherException
{
Cipher cipher;
DESedeKeySpec dks = new DESedeKeySpec(_getKeyBytes(sKey));
java.security.Key secretKey = SecretKeyFactory.getInstance("DESede").generateSecret(dks);
cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(1, secretKey);
return Base64.encodeBase64URLSafeString(cipher.doFinal(plainText));
}
到目前为止,我只有C语言:
public string Encrypt(string toEncrypt, string encryptionKey, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt);
if (useHashing)
{
var hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes(encryptionKey));
hashmd5.Clear();
}
else
{
keyArray = Encoding.UTF8.GetBytes(encryptionKey);
}
var tripleDesCryptoServiceProvider = new TripleDESCryptoServiceProvider();
//set the secret key for the tripleDES algorithm
tripleDesCryptoServiceProvider.Key = keyArray;
//mode of operation. there are other 4 modes.
//We choose ECB(Electronic code Book)
tripleDesCryptoServiceProvider.Mode = CipherMode.ECB;
//padding mode(if any extra byte added)
tripleDesCryptoServiceProvider.Padding = PaddingMode.PKCS7;
var cTransform = tripleDesCryptoServiceProvider.CreateEncryptor();
//transform the specified region of bytes array to resultArray
var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
//Release resources held by TripleDes Encryptor
tripleDesCryptoServiceProvider.Clear();
//Return the encrypted data into unreadable string format
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
如何使它们兼容
Java函数中的明文字节数组参数是通过String.getBytesUTF-8创建的