求一个java des32加密解密算法 如题,求Java的DES算法代码,可以用于解密用C语言写的D...

\u7528java\u5b9e\u73b0des\u52a0\u5bc6\u548c\u89e3\u5bc6

\u4e00\u4e2a\u7528DES\u6765\u52a0\u5bc6\u3001\u89e3\u5bc6\u7684\u7c7b
http://www.javanb.com/java/1/17816.html

import java.security.*;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

/**
* \u5b57\u7b26\u4e32\u5de5\u5177\u96c6\u5408
* @author Liudong
*/
public class StringUtils {

private static final String PASSWORD_CRYPT_KEY = "__jDlog_";
private final static String DES = "DES";

/**
* \u52a0\u5bc6
* @param src \u6570\u636e\u6e90
* @param key \u5bc6\u94a5\uff0c\u957f\u5ea6\u5fc5\u987b\u662f8\u7684\u500d\u6570
* @return \u8fd4\u56de\u52a0\u5bc6\u540e\u7684\u6570\u636e
* @throws Exception
*/
public static byte[] encrypt(byte[] src, byte[] key)throws Exception {
//DES\u7b97\u6cd5\u8981\u6c42\u6709\u4e00\u4e2a\u53ef\u4fe1\u4efb\u7684\u968f\u673a\u6570\u6e90
SecureRandom sr = new SecureRandom();
// \u4ece\u539f\u59cb\u5bc6\u5319\u6570\u636e\u521b\u5efaDESKeySpec\u5bf9\u8c61
DESKeySpec dks = new DESKeySpec(key);
// \u521b\u5efa\u4e00\u4e2a\u5bc6\u5319\u5de5\u5382\uff0c\u7136\u540e\u7528\u5b83\u628aDESKeySpec\u8f6c\u6362\u6210
// \u4e00\u4e2aSecretKey\u5bf9\u8c61
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher\u5bf9\u8c61\u5b9e\u9645\u5b8c\u6210\u52a0\u5bc6\u64cd\u4f5c
Cipher cipher = Cipher.getInstance(DES);
// \u7528\u5bc6\u5319\u521d\u59cb\u5316Cipher\u5bf9\u8c61
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
// \u73b0\u5728\uff0c\u83b7\u53d6\u6570\u636e\u5e76\u52a0\u5bc6
// \u6b63\u5f0f\u6267\u884c\u52a0\u5bc6\u64cd\u4f5c
return cipher.doFinal(src);
}

/**
* \u89e3\u5bc6
* @param src \u6570\u636e\u6e90
* @param key \u5bc6\u94a5\uff0c\u957f\u5ea6\u5fc5\u987b\u662f8\u7684\u500d\u6570
* @return \u8fd4\u56de\u89e3\u5bc6\u540e\u7684\u539f\u59cb\u6570\u636e
* @throws Exception
*/
public static byte[] decrypt(byte[] src, byte[] key)throws Exception {
// DES\u7b97\u6cd5\u8981\u6c42\u6709\u4e00\u4e2a\u53ef\u4fe1\u4efb\u7684\u968f\u673a\u6570\u6e90
SecureRandom sr = new SecureRandom();
// \u4ece\u539f\u59cb\u5bc6\u5319\u6570\u636e\u521b\u5efa\u4e00\u4e2aDESKeySpec\u5bf9\u8c61
DESKeySpec dks = new DESKeySpec(key);
// \u521b\u5efa\u4e00\u4e2a\u5bc6\u5319\u5de5\u5382\uff0c\u7136\u540e\u7528\u5b83\u628aDESKeySpec\u5bf9\u8c61\u8f6c\u6362\u6210
// \u4e00\u4e2aSecretKey\u5bf9\u8c61
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher\u5bf9\u8c61\u5b9e\u9645\u5b8c\u6210\u89e3\u5bc6\u64cd\u4f5c
Cipher cipher = Cipher.getInstance(DES);
// \u7528\u5bc6\u5319\u521d\u59cb\u5316Cipher\u5bf9\u8c61
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
// \u73b0\u5728\uff0c\u83b7\u53d6\u6570\u636e\u5e76\u89e3\u5bc6
// \u6b63\u5f0f\u6267\u884c\u89e3\u5bc6\u64cd\u4f5c
return cipher.doFinal(src);
}
/**
* \u5bc6\u7801\u89e3\u5bc6
* @param data
* @return
* @throws Exception
*/
public final static String decrypt(String data){
try {
return new String(decrypt(hex2byte(data.getBytes()),
PASSWORD_CRYPT_KEY.getBytes()));
}catch(Exception e) {
}
return null;
}
/**
* \u5bc6\u7801\u52a0\u5bc6
* @param password
* @return
* @throws Exception
*/
public final static String encrypt(String password){
try {
return byte2hex(encrypt(password.getBytes(),PASSWORD_CRYPT_KEY.getBytes())); }catch(Exception e) {
}
return null;
}

\u6bd4\u8f83\u957f, \u8f6c\u4e86\u4e00\u90e8\u5206.

\u4ffa\u5c31\u662f\u6765\u5e2e\u52a9\u4f60\u8fd9\u6837\u53ef\u7231\u7684\u4eba\u3002\u4ffa\u53ef\u662f\u82b1\u4e86\u51e0\u5e74\u7684\u65f6\u95f4\u8d39\u4e86\u591a\u5927\u7684\u529b\u6c14\u624d\u80fd\u628a\u8fd9\u4e2a\u4e1c\u897f\u5f04\u51fa\u6765\uff01
DES\u52a0\u5bc6\u8fd8\u6ca1\u6709AES\u4e25\u5bc6\uff1a
package com.palic.pss.afcs.worldthrough.common.util;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import repack.com.thoughtworks.xstream.core.util.Base64Encoder;/** * AES\u52a0\u5bc6\u89e3\u5bc6 * @author * */public class AesUtils {public static final String cKey= "assistant7654321"; /** * \u52a0\u5bc6--\u628a\u52a0\u5bc6\u540e\u7684byte\u6570\u7ec4\u5148\u8fdb\u884c\u4e8c\u8fdb\u5236\u8f6c16\u8fdb\u5236\u5728\u8fdb\u884cbase64\u7f16\u7801 * @param sSrc * @param sKey * @return * @throws Exception */ public static String encrypt(String sSrc, String sKey) throws Exception { if (sKey == null) { throw new IllegalArgumentException("Argument sKey is null."); } if (sKey.length() != 16) { throw new IllegalArgumentException( "Argument sKey'length is not 16."); } byte[] raw = sKey.getBytes("ASCII"); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(sSrc.getBytes("UTF-8")); String tempStr = parseByte2HexStr(encrypted); Base64Encoder encoder = new Base64Encoder(); return encoder.encode(tempStr.getBytes("UTF-8")); } /** *\u89e3\u5bc6--\u5148 \u8fdb\u884cbase64\u89e3\u7801\uff0c\u5728\u8fdb\u884c16\u8fdb\u5236\u8f6c\u4e3a2\u8fdb\u5236\u7136\u540e\u518d\u89e3\u7801 * @param sSrc * @param sKey * @return * @throws Exception */ public static String decrypt(String sSrc, String sKey) throws Exception { if (sKey == null) { throw new IllegalArgumentException("499"); } if (sKey.length() != 16) { throw new IllegalArgumentException("498"); } byte[] raw = sKey.getBytes("ASCII"); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); Base64Encoder encoder = new Base64Encoder(); byte[] encrypted1 = encoder.decode(sSrc); String tempStr = new String(encrypted1, "utf-8"); encrypted1 = parseHexStr2Byte(tempStr); byte[] original = cipher.doFinal(encrypted1); String originalString = new String(original, "utf-8"); return originalString; } /** * \u5c06\u4e8c\u8fdb\u5236\u8f6c\u6362\u621016\u8fdb\u5236 * * @param buf * @return */ public static String parseByte2HexStr(byte buf[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < buf.length; i++) { String hex = Integer.toHexString(buf[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } sb.append(hex.toUpperCase()); } return sb.toString(); } /** * \u5c0616\u8fdb\u5236\u8f6c\u6362\u4e3a\u4e8c\u8fdb\u5236 * * @param hexStr * @return */ public static byte[] parseHexStr2Byte(String hexStr) { if (hexStr.length() < 1) return null; byte[] result = new byte[hexStr.length() / 2]; for (int i = 0; i < hexStr.length() / 2; i++) { int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); result[i] = (byte) (high * 16 + low); } return result; } public static void main(String[] args) throws Exception {/** \u52a0\u5bc6\u7528\u7684Key \u53ef\u4ee5\u752826\u4e2a\u5b57\u6bcd\u548c\u6570\u5b57\u7ec4\u6210\uff0c\u6700\u597d\u4e0d\u8981\u7528\u4fdd\u7559\u5b57\u7b26\uff0c\u867d\u7136\u4e0d\u4f1a\u9519\uff0c\u81f3\u4e8e\u600e\u4e48\u88c1\u51b3\uff0c\u4e2a\u4eba\u770b\u60c5\u51b5\u800c\u5b9a*/String cKey = "assistant7654321";// \u9700\u8981\u52a0\u5bc6\u7684\u5b57\u4e32String cSrc = "123456";// \u52a0\u5bc6long lStart = System.currentTimeMillis();String enString = encrypt(cSrc, cKey);System.out.println("\u52a0\u5bc6\u540e\u7684\u5b57\u4e32\u662f\uff1a" + enString);long lUseTime = System.currentTimeMillis() - lStart;System.out.println("\u52a0\u5bc6\u8017\u65f6\uff1a" + lUseTime + "\u6beb\u79d2");// \u89e3\u5bc6lStart = System.currentTimeMillis();String DeString = decrypt(enString, cKey);System.out.println("\u89e3\u5bc6\u540e\u7684\u5b57\u4e32\u662f\uff1a" + DeString);lUseTime = System.currentTimeMillis() - lStart;System.out.println("\u89e3\u5bc6\u8017\u65f6\uff1a" + lUseTime + "\u6beb\u79d2");}}

package cn.xinxi.des;

import java.security.Key;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;


public class DES {
private static final String str="xinxi";
public static void main(String[] args) throws Exception {
jdkDES();
bcDES();
}
public static void jdkDES() throws Exception{
//生成key
//KeyGenerator,密钥生成器
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);//指定key size 这里使用默认值56位
//声称密钥
SecretKey secreKey= keyGenerator.generateKey();
byte[] bytesKey = secreKey.getEncoded();

//key转换(恢复密钥)
// SecretKey convertSecreKey = new SecretKeySpec(bytesKey,"DES");//与下面三行效果貌似差不多
DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
SecretKeyFactory factory=SecretKeyFactory.getInstance("DES");
// System.out.println(keyGenerator.getProvider());
Key convertSecreKey = factory.generateSecret(desKeySpec);

//加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//加密算法/工作方式/填充方式
cipher.init(Cipher.ENCRYPT_MODE,convertSecreKey);//模式(此处是加密模式)、key
byte[] result = cipher.doFinal(str.getBytes());//参数是要被加密的内容
System.out.println("JDK DES加密结果:"+Hex.encodeHexString(result));//转成16进制

//解密 生成key和key转换  与加密一样
cipher.init(Cipher.DECRYPT_MODE, convertSecreKey);//模式(此处是解密模式)、key
result=cipher.doFinal(result);
System.out.println("JDK DES解密结果:"+new String(result));
}
public static void bcDES() throws Exception{
Security.addProvider(new BouncyCastleProvider());

//生成key
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES","BC");
// System.out.println(keyGenerator.getProvider());
keyGenerator.init(56);//指定key size 这里使用默认值56位
SecretKey secreKey= keyGenerator.generateKey();
byte[] bytesKey = secreKey.getEncoded();

//key转换
DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
SecretKeyFactory factory=SecretKeyFactory.getInstance("DES");
Key convertSecreKey = factory.generateSecret(desKeySpec);

//加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//加密算法/工作方式/填充方式
cipher.init(Cipher.ENCRYPT_MODE,convertSecreKey);//模式(此处是加密模式)、key
byte[] result = cipher.doFinal(str.getBytes());//参数是要被加密的内容
System.out.println("BC DES加密结果:"+Hex.encodeHexString(result));//转成16进制

//解密 生成key和key转换与加密一样
cipher.init(Cipher.DECRYPT_MODE, convertSecreKey);//模式(此处是解密模式)、key
result=cipher.doFinal(result);
System.out.println("BC DES解密结果:"+new String(result));
}
}

是你想要的么?



扩展阅读:javascript入门 ... jaaaw ... java入门网站 ... 金蝶eas打开缺少javaw ... java windowbuilder ... jquery触发submit事件 ... javaw exe ... java官网网址 ... javac ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网