从网上找了不少的DES加密源代码,有关 C# 和 Java。
由于.NET默认 CBC模式的DES加密,这样JAVA也得是CBC模式的加密。
java #
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
public class DES {
private byte[] desKey;
private final byte[] EncryptionIV = "ABCDEFGH".getBytes();
private final static String DES = "DES/CBC/PKCS5Padding";
public DES(byte[] desKey)
{
this.desKey = desKey;
}
public byte[] doEncrypt(byte[] plainText) throws Exception
{
javax.crypto.spec.IvParameterSpec spec=new javax.crypto.spec.IvParameterSpec( EncryptionIV );
byte rawKeyData[] = desKey;
DESKeySpec dks = new DESKeySpec(rawKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(DES);
cipher.init(Cipher.ENCRYPT_MODE, key, spec );
byte data[] = plainText;
byte encryptedData[] = cipher.doFinal(data);
return encryptedData;
}
}
接下来用 C# .Net
public sealed class DESEncrypt
{
private static string key = "11111111";
private static string IV = "11111111";
public static string Key
{
get
{
return key;
}
set
{
key = value;
}
}
public static byte[] DesEncrypt(string encryptString)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));
byte[] keyIV = Encoding.UTF8.GetBytes(IV.Substring(0, 8));
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return mStream.ToArray();
}
}
经测试, 两段代码所完成的加密结果是一样的。