读书人

编解码工具种3DES算法

发布时间: 2012-10-12 10:17:04 作者: rapoo

编解码工具类——3DES算法

???? 3DES(http://baike.baidu.com/view/350958.htm)是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。数据加密标准—ES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。

?

/** * 3DES编码 * @param in 待编码值 * @param mode 反馈模式,如“CBC” * @param padding 填充方案,如“PKCS7Padding” * @param keyValue 密锁 * @param iv 初始化向量,该值为十六进制字符串 * @return 已编码值 */public static byte[] tripleDESEncode(String in, String mode, String padding, String keyValue, String iv) {Validate.notEmpty(mode);Validate.notEmpty(padding);byte[] out = null;try {out = in.getBytes(CHARSET);} catch (UnsupportedEncodingException e) {logger.error("3DES编码出错!", e);}return tripleDES(Cipher.ENCRYPT_MODE, out, mode, padding, keyValue, iv, "3DES编码出错!");}

?

?

/** * 3DES解码 * @param in 待解码值 * @param mode 反馈模式,如“CBC” * @param padding 填充方案,如“PKCS7Padding” * @param keyValue 密锁 * @param iv 初始化向量,该值为十六进制字符串 * @return 已解码值 */public static String tripleDESDecode(byte[] in, String mode, String padding, String keyValue, String iv) {String out = null;Validate.notEmpty(mode);Validate.notEmpty(padding);byte[] value = tripleDES(Cipher.DECRYPT_MODE, in, mode, padding, keyValue, iv, "3DES解码出错!");try {out = new String(value, CHARSET);} catch (UnsupportedEncodingException e) {logger.error("3DES解码操作,不支持字符集" + CHARSET + "!");}return out;}

?

/** *  * 3DES算法 *  * @param opMode 操作模式;Cipher.ENCRYPT_MODE:编码;Cipher.DECRYPT_MODE:解码 * @param in 待编/解码值 * @param mode 反馈模式 * @param padding 填充方案 * @param keyValue 密锁 * @param iv 初始化向量,该值为十六进制字符串 * @param errorTip 错误信息 * @return  已编/解码值 */private static byte[] tripleDES(int opMode, byte[] in, String mode, String padding, String keyValue, String iv,final String errorTip) {byte[] out = null;final StringBuilder transformation = new StringBuilder(TRIPLE_DES_ALGORITHM).append("/").append(mode).append("/").append(padding);//算法参数try {Security.addProvider(new BouncyCastleProvider());Cipher cipher = Cipher.getInstance(transformation.toString(), TRIPLE_DES_PROVIDER);Key key = new SecretKeySpec(Hex.decode(keyValue), TRIPLE_DES_ALGORITHM);AlgorithmParameterSpec params = new IvParameterSpec(Hex.decode(iv));cipher.init(opMode, key, params);out = cipher.doFinal(in);} catch (NoSuchAlgorithmException e) {logger.error(errorTip, e);} catch (NoSuchProviderException e) {logger.error(errorTip, e);} catch (NoSuchPaddingException e) {logger.error(errorTip, e);} catch (InvalidKeyException e) {logger.error(errorTip, e);} catch (InvalidAlgorithmParameterException e) {logger.error(errorTip, e);} catch (IllegalBlockSizeException e) {logger.error(errorTip, e);} catch (BadPaddingException e) {logger.error(errorTip, e);}return out;}

?

?? 该方法中的密码获取实例功能代码段——Cipher.getInstance(...),较费时,本地测试大约0.8s。

?? 该方法引用了bcprov-jdk15-145.jar。

读书人网 >软件架构设计

热点推荐