这是一个C#的解密DES方法,需要在java平台下跑,请问java下有没有对应的类,具体如何做
谢谢public string DesDecrypt(string base64str, string tkey) //解密
{
try
{
//byte[] inputByteArray = Convert.FromBase64String(base64str); byte[] arrB = Encoding.UTF8.GetBytes(base64str);
int iLen = arrB.Length; // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] inputByteArray = new byte[iLen / 2];
string strTmp = "";
for (int i = 0; i < iLen; i = i + 2)
{
strTmp = Encoding.Default.GetString(arrB, i, 2);
//Console.WriteLine(strTmp);
inputByteArray[i / 2] = (byte)int.Parse(strTmp, System.Globalization.NumberStyles.HexNumber);
} DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
DCSP.Mode = CipherMode.ECB;
DCSP.Padding = PaddingMode.None;
DCSP.Key = getKey(tkey); MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.Default.GetString(mStream.ToArray());
}
catch (Exception ex)
{
return ex.ToString();
} }
谢谢public string DesDecrypt(string base64str, string tkey) //解密
{
try
{
//byte[] inputByteArray = Convert.FromBase64String(base64str); byte[] arrB = Encoding.UTF8.GetBytes(base64str);
int iLen = arrB.Length; // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] inputByteArray = new byte[iLen / 2];
string strTmp = "";
for (int i = 0; i < iLen; i = i + 2)
{
strTmp = Encoding.Default.GetString(arrB, i, 2);
//Console.WriteLine(strTmp);
inputByteArray[i / 2] = (byte)int.Parse(strTmp, System.Globalization.NumberStyles.HexNumber);
} DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
DCSP.Mode = CipherMode.ECB;
DCSP.Padding = PaddingMode.None;
DCSP.Key = getKey(tkey); MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.Default.GetString(mStream.ToArray());
}
catch (Exception ex)
{
return ex.ToString();
} }
Java中解密的方式和C#中不一样,所以我解不了
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import sun.misc.BASE64Encoder;
import java.io.*;/*
* Demo of DESede (triple-DES) algorithm with ECB mode & PKCS5Padding
*/public class TestDESedeECBPKCS5Padding {
private static final String ALGORITHM = "DESede";
private static final String TRANSFORMATION = "DESede/ECB/PKCS5Padding";
public static void main(String[] args) {
System.out.println("**************Demo of " + TRANSFORMATION + " ***************");
try {
//create key
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
//keysize of 3DES should be 112/168
keyGen.init(168);
SecretKey key = keyGen.generateKey();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Input plain text:");
String plainText = br.readLine();
Cipher c = Cipher.getInstance(TRANSFORMATION);
//initialize the cipher
c.init(Cipher.ENCRYPT_MODE, key);
//do the encryption
byte[] encrypted = c.doFinal(plainText.getBytes("UTF8"));
BASE64Encoder encoder = new BASE64Encoder();
System.out.println("---BASE64 encoding string of encrypted data:");
System.out.println(encoder.encode(encrypted));
System.out.println("---end here.");
c.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = c.doFinal(encrypted);
System.out.println("Decrypted data:");
System.out.println(new String(decrypted, "UTF8"));
} catch (Exception eee) {
eee.printStackTrace();
}
}}
但加密解密要用到同一個key