java中DES加密解密
废话不多说,直接奉上代码:
代码一
packagecom.eabax.plugin.yundada.utils; importjava.io.IOException; importjava.security.InvalidKeyException; importjava.security.NoSuchAlgorithmException; importjava.security.SecureRandom; importjava.security.spec.InvalidKeySpecException; importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher; importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.NoSuchPaddingException; importjavax.crypto.SecretKey; importjavax.crypto.SecretKeyFactory; importjavax.crypto.spec.DESKeySpec; importorg.apache.commons.codec.binary.Base64; importsun.misc.BASE64Decoder; publicclassDESEncryptHelper{ privatefinalstaticStringDES="DES"; /** *生成密钥 *@paramemployeeCode */ publicstaticStringgetDESKey(StringencryptStr){ if(!CacheManager.getCache().containsKey("encryptKey_"+encryptStr)){ CacheManager.getCache().put("encryptKey_"+encryptStr,encryptStr+"tablemiyaokey"); } Stringkey=(String)CacheManager.getCache().get("encryptKey_"+encryptStr); returnkey; } /** *Description根据键值进行解密 *@paramdata *@paramkey加密键byte数组 *@return *@throwsIOException *@throwsException */ publicstaticStringdecrypt(Stringdata,Stringkey)throwsIOException, Exception{ if(data==null) returnnull; BASE64Decoderdecoder=newBASE64Decoder(); byte[]buf=decoder.decodeBuffer(data); byte[]bt=decrypt(buf,key.getBytes()); returnnewString(bt); } /** *对字符串加密 *@paramstr *@return *@throwsInvalidKeyException *@throwsIllegalBlockSizeException *@throwsBadPaddingException *@throwsInvalidKeySpecException *@throwsNoSuchAlgorithmException *@throwsNoSuchPaddingException */ publicstaticStringgetEncryptStr(Stringstr,StringencryptStr)throwsInvalidKeyException, IllegalBlockSizeException,BadPaddingException, InvalidKeySpecException,NoSuchAlgorithmException, NoSuchPaddingException{ //获取key Stringkey=getDESKey(encryptStr); //获取密钥 SecretKeyFactoryfactory=SecretKeyFactory.getInstance("DES"); DESKeySpeckeyspec=newDESKeySpec(key.getBytes()); SecretKeydeskey=factory.generateSecret(keyspec); //Cipher负责完成加密或解密工作 Cipherc=Cipher.getInstance("DES"); //根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式 c.init(Cipher.ENCRYPT_MODE,deskey); byte[]src=str.getBytes(); //该字节数组负责保存加密的结果 byte[]cipherByte=c.doFinal(src); Stringenstr=newString(Base64.encodeBase64(cipherByte)); returnenstr; } /** *Description根据键值进行解密 *@paramdata *@paramkey加密键byte数组 *@return *@throwsException */ privatestaticbyte[]decrypt(byte[]data,byte[]key)throwsException{ //生成一个可信任的随机数源 SecureRandomsr=newSecureRandom(); //从原始密钥数据创建DESKeySpec对象 DESKeySpecdks=newDESKeySpec(key); //创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance(DES); SecretKeysecurekey=keyFactory.generateSecret(dks); //Cipher对象实际完成解密操作 Ciphercipher=Cipher.getInstance(DES); //用密钥初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE,securekey,sr); returncipher.doFinal(data); } }
代码二
packagecom.sinosoft.olyvem.common; importjava.security.SecureRandom; importjavax.crypto.Cipher; importjavax.crypto.SecretKey; importjavax.crypto.SecretKeyFactory; importjavax.crypto.spec.DESKeySpec; importsun.misc.BASE64Encoder; publicclassDES...{ privatebyte[]desKey; publicDES(byte[]desKey)...{ this.desKey=desKey; } publicbyte[]doEncrypt(byte[]plainText)throwsException...{ //DES算法要求有一个可信任的随机数源 SecureRandomsr=newSecureRandom(); byterawKeyData[]=desKey;/**//*用某种方法获得密匙数据*/ //从原始密匙数据创建DESKeySpec对象 DESKeySpecdks=newDESKeySpec(rawKeyData); //创建一个密匙工厂,然后用它把DESKeySpec转换成 //一个SecretKey对象 SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES"); SecretKeykey=keyFactory.generateSecret(dks); //Cipher对象实际完成加密操作 Ciphercipher=Cipher.getInstance("DES"); //用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE,key,sr); //现在,获取数据并加密 bytedata[]=plainText;/**//*用某种方法获取数据*/ //正式执行加密操作 byteencryptedData[]=cipher.doFinal(data); returnencryptedData; } publicbyte[]doDecrypt(byte[]encryptText)throwsException...{ //DES算法要求有一个可信任的随机数源 SecureRandomsr=newSecureRandom(); byterawKeyData[]=desKey;/**//*用某种方法获取原始密匙数据*/ //从原始密匙数据创建一个DESKeySpec对象 DESKeySpecdks=newDESKeySpec(rawKeyData); //创建一个密匙工厂,然后用它把DESKeySpec对象转换成 //一个SecretKey对象 SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES"); SecretKeykey=keyFactory.generateSecret(dks); //Cipher对象实际完成解密操作 Ciphercipher=Cipher.getInstance("DES"); //用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE,key,sr); //现在,获取数据并解密 byteencryptedData[]=encryptText;/**//*获得经过加密的数据*/ //正式执行解密操作 bytedecryptedData[]=cipher.doFinal(encryptedData); returndecryptedData; } publicstaticvoidmain(String[]args)throwsException...{ Stringkey="FtpXPass"; Stringvalue="olympic"; BASE64Encoderbase64Encoder=newBASE64Encoder(); DESdesEncrypt=newDES(key.getBytes()); byte[]encryptText=desEncrypt.doEncrypt(value.getBytes()); //System.out.println("doEncrypt-"+toHexString(encryptText)); System.out.println("doEncrypt-" +base64Encoder.encode(encryptText)); byte[]decryptText=desEncrypt.doDecrypt("r9NGYcKAtdo=".getBytes()); System.out.println("doDecrypt-"+newString(decryptText)); //System.out.println("doDecrypt-"+toHexString(decryptText)); } publicstaticStringtoHexString(byte[]value)...{ StringnewString=""; for(inti=0;i<value.length;i++)...{ byteb=value[i]; Stringstr=Integer.toHexString(b); if(str.length()>2)...{ str=str.substring(str.length()-2); } if(str.length()<2)...{ str="0"+str; } newString+=str; } returnnewString.toUpperCase(); } }
以上就是本文关于DES加密解密的代码了,希望对大家学习java有所帮助。