您好,欢迎访问一九零五行业门户网

Java与asp.net之间des加密和解密的示例详解

最近有个新项目用java做的,老项目是asp.net,接口传输需要des加解密,网上查了些资料,大多数不能拿来就用,自己经过调试加工了一下,具体代码如下:
密钥一定是8位
/// <summary> /// 利用des加密算法加密字符串(可解密) /// </summary> /// <param name="ptoencrypt">被加密的字符串</param> /// <param name="key">密钥(只支持8个字节的密钥)</param> /// <returns>加密后的字符串</returns> public static string desencode(string ptoencrypt, string key) { try { descryptoserviceprovider provider = new descryptoserviceprovider(); provider.key = encoding.ascii.getbytes(key.substring(0, 8)); provider.iv = encoding.ascii.getbytes(key.substring(0, 8)); byte[] bytes = encoding.getencoding("gb2312").getbytes(ptoencrypt); memorystream stream = new memorystream(); cryptostream stream2 = new cryptostream(stream, provider.createencryptor(), cryptostreammode.write); stream2.write(bytes, 0, bytes.length); stream2.flushfinalblock(); stringbuilder builder = new stringbuilder(); foreach (byte num in stream.toarray()) { builder.appendformat("{0:x2}", num); } stream.close(); return builder.tostring(); } catch (exception) { return "xxxx"; } } /// <summary> /// 解密 /// </summary> /// <param name="plaintext">加密后的字符串</param> /// <param name="key">密钥(只支持8个字节的密钥)</param> /// <returns>解密后的字符串</returns> public static string decode(string str, string key, string enclangue) { try { //str=ruijie.pcfg.utils.desencrypt.hextostring(str); descryptoserviceprovider provider = new descryptoserviceprovider(); provider.key = encoding.ascii.getbytes(key.substring(0, 8)); provider.iv = encoding.ascii.getbytes(key.substring(0, 8)); byte[] buffer = new byte[str.length / 2]; for (int i = 0; i < (str.length / 2); i++) { int num2 = convert.toint32(str.substring(i * 2, 2), 0x10); buffer[i] = (byte)num2; } memorystream stream = new memorystream(); cryptostream stream2 = new cryptostream(stream, provider.createdecryptor(), cryptostreammode.write); stream2.write(buffer, 0, buffer.length); stream2.flushfinalblock(); stream.close(); if (enclangue == "java") { return encoding.getencoding("utf-8").getstring(stream.toarray()); } else { return encoding.getencoding("gb2312").getstring(stream.toarray()); } } catch (exception) { return ""; } }
对应java的方法如下:
package com.testspring; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.crypto.spec.deskeyspec; import javax.crypto.spec.ivparameterspec; public class deshelper { /** * 加密 * * * **/ public string encrypt(string message,string key) { return tohexstring(encryptbyte(message,key)).touppercase(); } /** * 明文加密后的数组 * * * **/ public byte[] encryptbyte(string message, string key) { byte[] s={}; try { cipher cipher = cipher.getinstance("des/cbc/pkcs5padding"); deskeyspec deskeyspec = new deskeyspec(key.getbytes("utf-8")); secretkeyfactory keyfactory = secretkeyfactory.getinstance("des"); secretkey secretkey = keyfactory.generatesecret(deskeyspec); ivparameterspec iv = new ivparameterspec(key.getbytes("utf-8")); cipher.init(cipher.encrypt_mode, secretkey, iv); return cipher.dofinal(message.getbytes("utf-8")); } catch (exception ex) { } return s; } /** * 数组转化成16进制 * * * **/ public static string tohexstring(byte b[]) { stringbuffer hexstring = new stringbuffer(); for (int i = 0; i < b.length; i++) { string plaintext = integer.tohexstring(0xff & b[i]); if (plaintext.length() < 2) plaintext = "0" + plaintext; hexstring.append(plaintext); } return hexstring.tostring(); } /** * 解密 *ciphertext 加密字符串,key 密钥,enclangue 加密语言 * * **/ public string decrypt(string ciphertext, string key,string enclangue) { try { byte[] bytesrc = converthexstring(ciphertext); cipher cipher = cipher.getinstance("des/cbc/pkcs5padding"); deskeyspec deskeyspec = new deskeyspec(key.getbytes("utf-8")); secretkeyfactory keyfactory = secretkeyfactory.getinstance("des"); secretkey secretkey = keyfactory.generatesecret(deskeyspec); ivparameterspec iv = new ivparameterspec(key.getbytes("utf-8")); cipher.init(cipher.decrypt_mode, secretkey, iv); byte[] retbyte = cipher.dofinal(bytesrc); if(enclangue=="java") { return new string(retbyte,"utf-8"); } else { return new string(retbyte); } } catch (exception ex) { } return ""; } /** * 转化16进制字符串为byte数组 * * **/ public static byte[] converthexstring(string ss) { byte digest[] = new byte[ss.length() / 2]; for (int i = 0; i < digest.length; i++) { string bytestring = ss.substring(2 * i, 2 * i + 2); int bytevalue = integer.parseint(bytestring, 16); digest[i] = (byte) bytevalue; } return digest; } }
以上就是java与asp.net之间des加密和解密的示例详解的详细内容。
其它类似信息

推荐信息