读书人

请热心人帮忙解决下这个DES加密解密算

发布时间: 2011-11-24 23:11:24 作者: rapoo

请好心人帮忙解决下这个DES加密解密算法。
对于DES加密解密本人不是很熟悉,不过因为项目前期.net端用的是这个,所以android端也得用这个算法来加密解密了。
.net端的加密解密算法如下:

private static byte[] key = { 0x01, 0x9E, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEE };
private static byte[] iv = { 0x00, 0x01, 0x00, 0x00, 0xEF, 0x00, 0x00, 0x01 };
#region 自定义加密算法
public static string encrypt(string str)
{
byte[] byteArrayInput = Encoding.UTF8.GetBytes(str);
byte[] byteArrayOutput;
StringBuilder strBuilderOutput = new StringBuilder(1000);
string strOutput;

DES des = DES.Create();
des.Key = key;
des.IV = iv;

MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);

cs.Write(byteArrayInput, 0, byteArrayInput.Length);
cs.FlushFinalBlock();
byteArrayOutput = ms.ToArray();
for (int i = 0; i < byteArrayOutput.Length; i++)
{
strBuilderOutput.AppendFormat("{0:X2}", byteArrayOutput[i]);
}
strOutput = strBuilderOutput.ToString();

des.Clear();
return strOutput;
}
//自定义解密算法
public static string decrypt(string str)
{
byte[] byteArrayInput = new byte[str.Length / 2];
byte[] byteArrayOutput;
string strOutput;

try
{
for (int i = 0; i < str.Length / 2; i++)
{
int x = Convert.ToInt32(str.Substring(2 * i, 2), 16);
byteArrayInput[i] = (byte)x;
}
}
catch
{
return null;
}

DES des = DES.Create();
des.Key = key;
des.IV = iv;

MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);

cs.Write(byteArrayInput, 0, byteArrayInput.Length);
cs.FlushFinalBlock();
byteArrayOutput = ms.ToArray();
strOutput = Encoding.UTF8.GetString(byteArrayOutput);

des.Clear();

return strOutput;
}
#endregion


现在就是在android端不知道怎么改成通用的DES加密解密算法,哪位朋友有相关的经验或者思路的,麻烦指点下,不甚感激。

[解决办法]

Java code
import java.security.Key;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESedeKeySpec;import biz.source_code.base64Coder.*;/** * @author Administrator *  */public class TripleDEService {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub    }    private static String strkey = "d+KuEICNtJsujXBH23MU6AjAjheQhpqJ";    private static String Algorithm = "desede/ECB/PKCS5Padding";    /**     * 加密String明文输入,String密文输出     *      * @param input     * @return     */    public static String DesEncrypt(String input) {        byte[] byteMi = null;        byte[] byteMing = null;        String strMi = "";        // BASE64Encoder base64en = new BASE64Encoder();        try {            byteMing = input.getBytes("UTF-8");            byte[] key = Base64Coder.decode(strkey); // BASE64Decoder().decodeBuffer(strkey);            byteMi = getEncCode(byteMing, key);            strMi = Base64Coder.encodeLines(byteMi); // base64en.encode(byteMi);        } catch (Exception e) {            e.printStackTrace();        } finally {            // base64en = null;            byteMing = null;            byteMi = null;        }        return strMi;    }    /**     * 加密以byte[]明文输入,byte[]密文输出     *      * @param byteS     * @return     */    private static byte[] getEncCode(byte[] byteS, byte[] key) {        byte[] byteFina = null;        Cipher cipher;        try {            Key deskey = null;            DESedeKeySpec spec = new DESedeKeySpec(key);            SecretKeyFactory keyfactory = SecretKeyFactory                    .getInstance("desede");            deskey = keyfactory.generateSecret(spec);            cipher = Cipher.getInstance(Algorithm);            cipher.init(Cipher.ENCRYPT_MODE, deskey);            byteFina = cipher.doFinal(byteS);        } catch (Exception e) {            e.printStackTrace();        } finally {            cipher = null;        }        return byteFina;    }    /**     * 解密 以String密文输入,String明文输出     *      * @param input     * @return     */    public static String DesDecrypt(String input) {        // BASE64Decoder base64De = new BASE64Decoder();        byte[] byteMing = null;        byte[] byteMi = null;        String strMing = "";        try {            byteMi = Base64Coder.decode(input); // base64De.decodeBuffer(input);            byte[] key = Base64Coder.decode(strkey); // new            // BASE64Decoder().decodeBuffer(strkey);            byteMing = getDesCode(byteMi, key);            strMing = new String(byteMing, "UTF-8");        } catch (Exception e) {            e.printStackTrace();        } finally {            // base64De = null;            byteMing = null;            byteMi = null;        }        return strMing;    }    /**     * 解密以byte[]密文输入,以byte[]明文输出     *      * @param byteD     * @return     */    private static byte[] getDesCode(byte[] byteD, byte[] key) {        Cipher cipher;        byte[] byteFina = null;        try {            Key deskey = null;            DESedeKeySpec spec = new DESedeKeySpec(key);            SecretKeyFactory keyfactory = SecretKeyFactory                    .getInstance("desede");            deskey = keyfactory.generateSecret(spec);            cipher = Cipher.getInstance(Algorithm);            cipher.init(Cipher.DECRYPT_MODE, deskey);            byteFina = cipher.doFinal(byteD);        } catch (Exception e) {            e.printStackTrace();        } finally {            cipher = null;        }        return byteFina;    }} 

读书人网 >Java相关

热点推荐