java 实现DES 加密解密的示例
packagecom.cn.peitest; importjavax.crypto.Cipher; importjavax.crypto.SecretKey; importjavax.crypto.SecretKeyFactory; importjavax.crypto.spec.DESKeySpec; importjavax.crypto.spec.IvParameterSpec; /** *@功能说明:
*@创建日期:2016年9月21日
*@变更记录:
*1、2016年9月21日LeoLu更新 */ publicclassDESUtil{ /**用于建立大写的十六进制字符的输出*/ privatestaticfinalchar[]DIGITS_UPPER={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; /**DES向量*/ privatestaticfinalbyte[]iv={0x12,0x34,0x56,0x78,(byte)0x90,(byte)0xab,(byte)0xcd,(byte)0xef}; //privatestaticfinalLoggerlog=LoggerFactory.getLogger(DESUtil.class); /** *@函数名称:encodeHex
*@创建日期:2016年9月22日
*@功能说明:将字节数组转换为十六进制字节数组
*@参数说明:databyte[]字节数组
*@参数说明:toDigitschar[]向量
*@返回说明:十六进制char[] */ privatestaticchar[]encodeHex(byte[]data,char[]toDigits){ intl=data.length; char[]out=newchar[l<<1]; for(inti=0,j=0;i>>4]; out[j++]=toDigits[0x0F&data[i]]; } returnout; } /** *@函数名称:encodeHexStr
*@创建日期:2016年9月22日
*@功能说明:将16进制字节数组转换为十六进制字符串
*@参数说明:databyte[]16进制字节数组
*@参数说明:toDigitschar[]向量
*@返回说明:String返回16进制字符串 */ privatestaticStringencodeHexStr(byte[]data,char[]toDigits){ returnnewString(encodeHex(data,toDigits)); } /** *@函数名称:hexStringToString
*@创建日期:2016年9月21日
*@功能说明:将16进制字符串转换为10进制字符串
*@参数说明:strString16进制字符串
*@返回说明:String */ privatestaticStringhexStringToString(Stringstr){ if(str==null||str.equals("")){ returnnull; } str=str.replace("",""); byte[]baKeyword=newbyte[str.length()/2]; for(inti=0;i*@创建日期:2016年9月22日
*@功能说明:加密字节数组
*@参数说明:arrBbyte[]需要加密的字节数组
*@参数说明:keyString秘钥
*@返回说明:byte[] */ privatestaticbyte[]encrypt(byte[]arrB,Stringkey)throwsException{ returnconverCrypt(arrB,key,true); } /** *@函数名称:encrypt
*@创建日期:2016年9月22日
*@功能说明:加密字符串
*@参数说明:xmlString加密字符串
*@参数说明:keyString秘钥
*@返回说明:String返回加密后的16进制字符串 */ publicstaticStringencrypt(Stringxml,Stringkey){ try{ returnencodeHexStr(encrypt(xml.getBytes("UTF-8"),key),DIGITS_UPPER); }catch(Exceptione){ System.out.println(e); return""; } } /** *@函数名称:decrypt
*@创建日期:2016年9月22日
*@功能说明:将16进制字节数组进行解密
*@参数说明:arrBbyte[]解密字节数组
*@参数说明:keyString秘钥
*@返回说明:byte[]返回解密后的16位字节数组 */ privatestaticbyte[]decrypt(byte[]arrB,Stringkey)throwsException{ returnconverCrypt(arrB,key,false); } /** *@函数名称:converCrypt
*@创建日期:2016年9月22日
*@功能说明:将16位的字节数据进行加密或解密
*@参数说明:arrBbyte[]需要加密的字节数组
*@参数说明:keyString秘钥
*@参数说明:encryptboolean是否加密,true加密,false解密
*@返回说明:byte[]返回16进制字节数组 */ privatestaticbyte[]converCrypt(byte[]arrB,Stringkey,booleanencrypt)throwsException{ Stringvikey=MD5.sign(key).substring(0,8).toUpperCase(); DESKeySpecdesKeySpec=newDESKeySpec(vikey.getBytes()); SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES"); SecretKeysecretKey=keyFactory.generateSecret(desKeySpec); IvParameterSpecivp=newIvParameterSpec(vikey.getBytes()); Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding"); /**加密*/ if(encrypt==true){ cipher.init(Cipher.ENCRYPT_MODE,secretKey,ivp); }else{ /**解密*/ cipher.init(Cipher.DECRYPT_MODE,secretKey,ivp); } returncipher.doFinal(arrB); } /** *@函数名称:decrypt
*@创建日期:2016年9月22日
*@功能说明:解密16进制字符串
*@参数说明:desStrString需要解密的16进制字符串
*@参数说明:keyString秘钥
*@返回说明:String返回解密后的10进制字符串 */ publicstaticStringdecrypt(StringdesStr,Stringkey){ try{ if(null==desStr||null==key){ return""; } returnhexStringToString(encodeHexStr(decrypt(hexStringToByte(newString(desStr.getBytes("UTF-8"))),key),DIGITS_UPPER)); }catch(Exceptione){ System.out.println(); return""; } } /** *@函数名称:hexStringToByte
*@创建日期:2016年9月22日
*@功能说明:将16进制字符串转换为16进制字节数组
*@参数说明:hexString需要转换的16进制字符串
*@返回说明:byte[]返回转换后的16进制字节数组 */ privatestaticbyte[]hexStringToByte(Stringhex){ intlen=(hex.length()/2); byte[]result=newbyte[len]; char[]achar=hex.toCharArray(); for(inti=0;i*@创建日期:2016年9月22日
*@功能说明:将字符转换为字节
*@参数说明:cchar需要转换的字符
*@返回说明:int返回字符对应的字节码 */ privatestaticinttoByte(charc){ byteb=(byte)"0123456789ABCDEF".indexOf(c); returnb; } /** *@构造函数 */ publicDESUtil(){ //TODOAuto-generatedconstructorstub } /** *@函数名称:main
*@创建日期:2016年9月21日
*@功能说明:
*@参数说明:
*@返回说明:void */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub try{ System.out.println("-----------------------------"); StringbStr="123"; Stringkey="SZAOA589"; StringbinSing=encrypt(bStr,key); System.out.println("加密前:"+bStr); System.out.println("加密后:"+binSing); System.out.println("解密后:"+decrypt(binSing,key)); System.out.println("-------------------------"); }catch(Exceptione){ //TODOAuto-generatedcatchbloc e.printStackTrace(); } //3B976A2A2919A60B57DFF3518F65E1FF //3B976A2A2919A60B57DFF3518F65E1FF /* *C4A737D04D0D05E2 BD2DD4FC5050EBD0 */ } } //================================ packagecom.cn.peitest; importjava.security.MessageDigest; publicclassMD5{ //生成MD5(截取16位长度) publicstaticStringsign(Stringmessage){ Stringmd5=""; try{ MessageDigestmd=MessageDigest.getInstance("MD5");//创建一个md5算法对象 byte[]messageByte=message.getBytes("UTF-8"); byte[]md5Byte=md.digest(messageByte);//获得MD5字节数组,16*8=128位 md5=bytesToHex(md5Byte).substring(0,16);//转换为16进制字符串 }catch(Exceptione){ e.printStackTrace(); } returnmd5; } //二进制转十六进制 publicstaticStringbytesToHex(byte[]bytes){ StringBufferhexStr=newStringBuffer(); intnum; for(inti=0;i以上就是java实现DES加密解密的示例代码的详细内容,更多关于javades加密解密的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。