`
Breese
  • 浏览: 62919 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 加密解密算法总结(转)

 
阅读更多

 

package tianya.cn.main;

import javax.crypto.Cipher;  

import javax.crypto.SecretKey;  

import javax.crypto.SecretKeyFactory;  

import javax.crypto.spec.DESKeySpec;  

  

import org.apache.log4j.Logger;  

  

import sun.misc.BASE64Decoder;  

import sun.misc.BASE64Encoder;  

  

/** 第一种

 * 用户密码加密解密 

 */  

public class Crypt {  

    public  static Logger logger = Logger.getLogger(Crypt.class.getName());  

    public static String KEYSTRING="202cb962ac59075b964b07152d234b70";  

    // --------------------------------------------------------------------------------------------  

    // 获得密钥  

    public static SecretKey getKey(String s) throws Exception {  

        // s ="g8TlgLEc6oqZxdwGe6pDiKB8Y";  

//      System.out.println("s==" + s);  

        char[] ss = s.toCharArray();  

        String sss = "";  

        for (int i = 0; i < ss.length; i = i + 2) {  

            sss = sss + ss[i];  

        }   

        SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");  

        DESKeySpec ks = new DESKeySpec(sss.substring(0, 8).getBytes());  

        SecretKey kd = kf.generateSecret(ks);  

        return kd;  

    }  

  

    // --------------------------------------------------------------------------------------------------  

    // 返回加密后的字符串  

    // key是用于生成密钥的字符串,input是要加密的字符串  

    public static String getEncryptedString(String key, String input) {  

        String base64 = "";  

        try {  

            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");  

            cipher.init(Cipher.ENCRYPT_MODE, getKey(key));  

//          System.out.print("getKey(key)===" + getKey(key) + "key==" + key);  

            byte[] inputBytes = input.getBytes();  

            byte[] outputBytes = cipher.doFinal(inputBytes);  

            BASE64Encoder encoder = new BASE64Encoder();  

            base64 = encoder.encode(outputBytes);  

        } catch (Exception e) {  

            base64 = e.getMessage();  

            logger.debug("加密出错:"+e.getMessage());  

        }  

        return base64;  

    }  

  

    // --------------------------------------------------------------------------------------------------  

    // 返回解密后的字符串  

    // key是用于生成密钥的字符串,input是要解密的字符串  

    public static String getDecryptedString(String key, String input) {  

        String result = null;  

        try {  

            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");  

            cipher.init(Cipher.DECRYPT_MODE, getKey(key));  

            BASE64Decoder decoder = new BASE64Decoder();  

            byte[] raw = decoder.decodeBuffer(input);  

            byte[] stringBytes = cipher.doFinal(raw);  

            result = new String(stringBytes, "UTF8");  

        } catch (Exception e) {  

            result = e.getMessage();  

            logger.debug("解密出错:"+e.getMessage());  

        }  

        return result;  

    }  

  

    public static String getKeyByResource(){  

//        String str = ApplicationResource.getValueByKey("password.key");  //从配置文件中获取202cb962ac59075b964b07152d234b70

    String str = "";

        if(str!=null && !str.equals("")){  

            return str;  

        }else{  

            return KEYSTRING;  

        }  

    }  

    /** 

     * 加密 

     * @param input 加密前的字符串 

     * @return 

     */  

    public static String getEncryptedString(String input){  

        return getEncryptedString( getKeyByResource(), input );  

    }  

    /** 

     * 解密 

     * @param input 加密后的字符串 

     * @return 

     */  

    public static String getDecryptedString(String input) {  

        return getDecryptedString( getKeyByResource(), input );  

    }  

      

}  

 

/*==================================第二种===================================*/

package tianya.cn.main;

 

import java.security.MessageDigest;

import java.security.Security;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

 

/**

 * 字符串 DESede(3DES) 加密

 * 

 * @param args在java中调用sun公司提供的3DES加密解密算法时

 *            ,需要使 用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: jce.jar

 *            security/US_export_policy.jar security/local_policy.jar

 *            ext/sunjce_provider.jar

 */

public class Te {

private static final String Algorithm = "DESede"; // 定义加密算法,可用

// DES,DESede,Blowfish

 

public static void main(String[] args) {

// TODO Auto-generated method stub

 

// 添加新安全算法,如果用JCE就要把它添加进去

 

Security.addProvider(new com.sun.crypto.provider.SunJCE());

 

final byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58,

 

(byte) 0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51,

 

(byte) 0xCB,

 

(byte) 0xDD, 0x55, 0x66, 0x77, 0x29, 0x74,

 

(byte) 0x98, 0x30, 0x40, 0x36,

 

(byte) 0xE2

 

}; // 24字节的密钥

 

String szSrc = "This is a 3DES test. 测试";

 

System.out.println("加密前的字符串:" + szSrc);

 

byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());

 

System.out.println("加密后的字符串:" + new String(encoded));

 

byte[] srcBytes = decryptMode(keyBytes, encoded);

 

System.out.println("解密后的字符串:" + (new String(srcBytes)));

}

 

// keybyte为加密密钥,长度为24字节

// src为被加密的数据缓冲区(源)

public static byte[] encryptMode(byte[] keybyte, byte[] src) {

try {

 

// 生成密钥

 

SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

 

// 加密

 

Cipher c1 = Cipher.getInstance(Algorithm);

 

c1.init(Cipher.ENCRYPT_MODE, deskey);

 

return c1.doFinal(src);// 在单一方面的加密或解密

 

} catch (java.security.NoSuchAlgorithmException e1) {

 

// TODO: handle exception

 

e1.printStackTrace();

 

} catch (javax.crypto.NoSuchPaddingException e2) {

 

e2.printStackTrace();

 

} catch (java.lang.Exception e3) {

 

e3.printStackTrace();

 

}

return null;

}

 

// keybyte为加密密钥,长度为24字节

// src为加密后的缓冲区

public static byte[] decryptMode(byte[] keybyte, byte[] src) {

try {

 

// 生成密钥

 

SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

 

// 解密

 

Cipher c1 = Cipher.getInstance(Algorithm);

 

c1.init(Cipher.DECRYPT_MODE, deskey);

 

return c1.doFinal(src);

 

} catch (java.security.NoSuchAlgorithmException e1) {

 

// TODO: handle exception

 

e1.printStackTrace();

 

} catch (javax.crypto.NoSuchPaddingException e2) {

 

e2.printStackTrace();

 

} catch (java.lang.Exception e3) {

 

e3.printStackTrace();

 

}

return null;

}

 

// 转换成十六进制字符串

public static String byte2Hex(byte[] b) {

String hs = "";

 

String stmp = "";

 

for (int n = 0; n < b.length; n++) {

 

stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

 

if (stmp.length() == 1) {

 

hs = hs + "0" + stmp;

 

} else {

 

hs = hs + stmp;

 

}

 

if (n < b.length - 1)

hs = hs + ":";

 

}

return hs.toUpperCase();

}

 

/***

* 16位MD加密算法

* @param content

* @return 16位MD5

*/

private static String get16BitMd5(String content) {

String result = null;

try {

MessageDigest md5 = MessageDigest.getInstance("MD5");

byte[] source = content.getBytes("utf-8");

char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符

'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c',

'd', 'e', 'f' };

md5.update(source);

byte tmp[] = md5.digest(); // MD5 的计算结果是一个 128 位的长整数,

// 用字节表示就是 16 个字节

char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,

// 所以表示成 16 进制需要 32 个字符

int k = 0; // 表示转换结果中对应的字符位置

for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节

// 转换成 16 进制字符的转换

byte byte0 = tmp[i]; // 取第 i 个字节

str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,

// >>> 为逻辑右移,将符号位一起右移

str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换

}

// 换后的结果转换为字符串

result = new String(str);

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

 

/***

* 32位MD加密算法

* @param content

* @return 32位MD5

*/

private static String get32BitMd5(String content) {

// 返回字符串

String md5Str = null;

try {

// 操作字符串

StringBuffer buf = new StringBuffer();

MessageDigest md = MessageDigest.getInstance("MD5");

// 添加要进行计算摘要的信息,使用 content 的 byte 数组更新摘要。

md.update(content.getBytes());

// 计算出摘要,完成哈希计算。

byte b[] = md.digest();

int i;

for (int offset = 0; offset < b.length; offset++) {

i = b[offset];

if (i < 0) {

i += 256;

}

if (i < 16) {

buf.append("0");

}

// 将整型 十进制 i 转换为16位,用十六进制参数表示的无符号整数值的字符串表示形式。

buf.append(Integer.toHexString(i));

}

// 32位的加密

md5Str = buf.toString();

// 16位的加密

// md5Str = buf.toString().md5Strstring(8,24);

} catch (Exception e) {

e.printStackTrace();

}

return md5Str;

}

}

 

分享到:
评论

相关推荐

    Java实现的RSA加密解密算法示例

    Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...

    很强的Java加密解密算法源码.zip

    在这个"很强的Java加密解密算法源码.zip"中,我们可以深入学习如何在Java中实现3DES算法来加密和解密文件。 3DES算法是一种块加密算法,它通过三次应用DES密钥来增强安全性。基本流程如下: 1. **加密过程**:输入...

    java实现的RC4加密解密算法示例

    "java实现的RC4加密解密算法示例" RC4加密解密算法是Symmetric-key block cipher的一种,使用同一个密钥进行加密和解密。java实现的RC4加密解密算法可以通过以下步骤实现: 1. 初始化数组:创建一个大小为256的...

    java实现MD5加密解密算法

    java实现MD5加密解密算法,java源代码~

    java加密解密算法大全

    ### Java加密解密算法详解 #### 一、加密概述与应用 加密技术是信息安全领域中的关键技术之一,其核心在于通过特定算法对原始信息(明文)进行变换,使其成为不可直接阅读的形式(密文),从而保护信息在传输或...

    java加密解密算法小实例

    本实例将探讨一些常见的加密解密算法及其在Java中的实现。以下是一些关键知识点: 1. **对称加密算法**:这类算法使用相同的密钥进行加密和解密,如DES(Data Encryption Standard)、3DES(Triple DES)和AES...

    JAVA源码很强的Java加密解密算法源码

    根据提供的文件信息,本文将详细解析“JAVA源码很强的Java加密解密算法源码”这一主题中的关键知识点。从标题和描述来看,这是一份关于Java加密解密算法的源代码,通过百度网盘分享的方式提供给感兴趣的开发者。下面...

    很强的Java加密解密算法源码

    在IT行业中,加密和解密是信息安全领域的重要...综上所述,Java加密解密算法源码涵盖了多种安全机制,开发者可以基于这些源码进一步理解并定制自己的加密解决方案。通过深入学习和实践,可以有效提升应用程序的安全性。

    java 加密解密 算法

    Java加密解密是信息安全领域的重要组成部分,用于保护数据的安全性和隐私。在Java中,我们可以使用多种加密算法来实现数据的加密和解密。本篇将详细介绍几种常见的加密算法及其在Java中的应用,包括DES、RSA以及非...

    Java实现AES加密和解密算法

    在Java中实现AES(Advanced Encryption Standard)加密和解密算法主要涉及到对称密钥加密技术。AES算法是一种块密码,采用固定大小的128位(16字节)块进行加密和解密,支持128、192和256位的密钥长度。在给定的代码...

    JAVA 加密 解密 算法

    通过对Java加密解密算法的学习,特别是对Blowfish算法的深入理解,我们能够更好地保护数据的安全性。在实际开发中,选择合适的加密算法非常重要,同时还需要注意算法的安全性和性能之间的平衡。希望本文能帮助大家更...

    java加密解密算法(AES)

    java加密解密算法的集合,AES DES。

    RC4加密解密算法的Java实现

    *网上很多RC4算法在用的时候,都会出现「加密然后立即在内存中解密」可以,但先把加密后的密文写入文件再读取解密就失败的情况。这段代码没有这种情况。...*采用了重载函数,我用了String加密解密,成功。

    TripleDES加密解密算法的实现(JAVA)

    TripleDES加密解密算法的实现(JAVA)

    java加密解密工具

    本篇文章将深入探讨Java加密解密的核心概念、常用算法以及如何使用它们。 一、加密的基本原理 加密是一种将明文数据转换为看似随机的密文的过程,目的是保护数据免受未经授权的访问。解密则是将密文还原为原始明文...

    java加密解密算法

    对文本进行加密和解密,异或加密和转化二进制十六进制加密

    java加密解密算法类_Cipher

    这个"java加密解密算法类_Cipher"可能包含了上述所有或部分知识点的实现,通过阅读源代码,我们可以更深入地理解Java中加密解密的实际应用和细节。在实际开发中,这些知识对于构建安全的网络通信、数据库存储和数据...

    常用java加密解密算法

    在这篇文档中,我们主要介绍了三种常用加密解密算法:DES算法、RSA算法以及MD5算法,并简要分析了它们的使用规则和安全性。 首先,DES(Data Encryption Standard,数据加密标准)算法是一种经典的对称密钥加密技术...

    基于java的开发源码-很强的加密解密算法源码.zip

    基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发...

Global site tag (gtag.js) - Google Analytics