`

java中常用的数据加密算法

    博客分类:
  • java
阅读更多

文章来源:http://www.itnose.net/detail/6034064.html
更多文章:http://www.itnose.net/type/1.html

以下为加密的工具类:

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

import com.sun.mail.util.BASE64DecoderStream;
import com.sun.mail.util.BASE64EncoderStream;


public class util {
    /**
     * 传入名文和公钥钥对数据进行RSA解密
     * <br>生成时间:2014年5月2日  下午2:38:13
     * <br>返回值:String
     * <br>@param src
     * <br>@param pubkey
     * <br>@return
     */
    public static String rsaEncoding(String src,PublicKey pubkey){
        try {
            Cipher cip = Cipher.getInstance("RSA");
            cip.init(cip.ENCRYPT_MODE, pubkey);
            byte[] by = cip.doFinal(src.getBytes());
            return new String(BASE64EncoderStream.encode(by));
            
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        } catch (NoSuchPaddingException e) {
            throw new RuntimeException(e);
        } catch (InvalidKeyException e) {
            throw new RuntimeException(e);
        } catch (IllegalBlockSizeException e) {
            throw new RuntimeException(e);
        } catch (BadPaddingException e) {
            throw new RuntimeException(e);
        }
        
    }
    /**
     * 传入RSA密文和私钥对数据进行解密
     * <br>生成时间:2014年5月2日  下午2:37:08
     * <br>返回值:String
     * <br>@param sec
     * <br>@param privkey
     * <br>@return
     */
    public static String rsaDeEncoding(String sec,PrivateKey privkey){
        try {
            Cipher cip = Cipher.getInstance("RSA");
            cip.init(cip.DECRYPT_MODE, privkey);
            byte[] by = BASE64DecoderStream.decode(sec.getBytes());
            return new String(cip.doFinal(by));
            
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        } catch (NoSuchPaddingException e) {
            throw new RuntimeException(e);
        } catch (InvalidKeyException e) {
            throw new RuntimeException(e);
        } catch (IllegalBlockSizeException e) {
            throw new RuntimeException(e);
        } catch (BadPaddingException e) {
            throw new RuntimeException(e);
        }
        
    }
    
    /**
     * 传入字符串、密钥,并加密字符串(对称加密加密),支持:DES、AES、DESede(3DES)
     * <br>生成时间:2014年5月2日  下午12:05:44
     * <br>返回值:String 密文
     * <br>@param src
     * <br>@param key
     * <br>@param method(DES、AES、DESede)
     * <br>@return
     */
    //对称加密加密
    public static String doubKeyEncoding(String src,String keysrc,String method) {
        SecretKey key;
        try {
            //生成密钥
            KeyGenerator kg =  KeyGenerator.getInstance(method);
            //初始化此密钥生成器。
            kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
            key = kg.generateKey();
            
            //加密
            Cipher ciph =  Cipher.getInstance(method);
            ciph.init(Cipher.ENCRYPT_MODE, key);
            ciph.update(src.getBytes("utf-8"));
            //使用64进行编码,一避免出现丢数据情景
            byte[] by = BASE64EncoderStream.encode(ciph.doFinal());
            return new String(by);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        } catch (NoSuchPaddingException e) {
            throw new RuntimeException(e);
        } catch (InvalidKeyException e) {
            throw new RuntimeException(e);
        } catch (IllegalBlockSizeException e) {
            throw new RuntimeException(e);
        } catch (BadPaddingException e) {
            throw new RuntimeException(e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 传入字符串、密钥、加密方式,并解密字符串(对称加密解密密),支持:DES、AES、DESede(3DES)
     * <br>生成时间:2014年5月2日  下午1:12:13
     * <br>返回值:String 密钥原文
     * <br>@param sec
     * <br>@param key
     * <br>@param method(DES、AES、DESede)
     * <br>@return
     */
    public static String doubKeyDencoding(String sec,String keysrc,String method) {
        SecretKey key;
        try {
            //生成密钥
            KeyGenerator kg =  KeyGenerator.getInstance(method);
            //初始化此密钥生成器。
            kg.init(new SecureRandom(keysrc.getBytes("utf-8")));
            key = kg.generateKey();
            //加密
            Cipher ciph =  Cipher.getInstance(method);
            ciph.init(ciph.DECRYPT_MODE, key);
            //使用64进行解码,一避免出现丢数据情景
            byte[] by = BASE64DecoderStream.decode(sec.getBytes());
            ciph.update(by);
            return new String(ciph.doFinal());
            
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        } catch (NoSuchPaddingException e) {
            throw new RuntimeException(e);
        } catch (InvalidKeyException e) {
            throw new RuntimeException(e);
        } catch (IllegalBlockSizeException e) {
            throw new RuntimeException(e);
        } catch (BadPaddingException e) {
            throw new RuntimeException(e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
        
    /**
     * 单向信息加密(信息摘要),支持:md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512,
     * <br>生成时间:2014年5月2日  上午11:13:44
     * <br>返回值:String         加密后的密文
     * <br>@param src     传入加密字符串(明文)
     * <br>@param method  指定算法(md5、md2、SHA(SHA-1,SHA1)、SHA-256、SHA-384、SHA-512)
     * <br>@return
     */
    public static String ecodingPasswd(String src,String method){
        
        try {
            //信息摘要算法
            MessageDigest md5 = MessageDigest.getInstance(method);
            md5.update(src.getBytes());
            byte[] encoding = md5.digest();
            //使用64进行编码,一避免出现丢数据情景
            return new String(BASE64EncoderStream.encode(encoding));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e+"加密失败!!");
        }
        
    }
}

以下为测试类

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;

import org.junit.Test;

import com.shuqi.utils.util;

public class test {
    @Test
    public void ecoding() {
//        //MD5 加密
//        System.out.println("md5"+util.ecodingPasswd("shuqi", "md5"));
//        System.out.println("md2"+util.ecodingPasswd("shuqi", "md2"));
//        //sha加密
//        System.out.println("sha"+util.ecodingPasswd("shuqi", "sha"));
//        System.out.println("sha-1"+util.ecodingPasswd("shuqi", "sha-1"));
//        System.out.println("sha1"+util.ecodingPasswd("shuqi", "sha1"));
//        System.out.println("sha-256"+util.ecodingPasswd("shuqi", "sha-256"));
//        System.out.println("sha-384"+util.ecodingPasswd("shuqi", "sha-384"));
//        System.out.println("sha-512"+util.ecodingPasswd("shuqi", "sha-512"));
        
//        String mi = util.doubKeyEncoding("hehe", "shuqi", "AES");
//        String ming = util.doubKeyDencoding(mi, "shuqi", "AES");
//        System.out.println("AES加密解密");
//        System.out.println("加密hehhe,密文   >>>     "+mi);
//        System.out.println("解密"+mi+",明文   >>>     "+ming);
//        
//        mi = util.doubKeyEncoding("hehe", "shuqi", "DES");
//        ming = util.doubKeyDencoding(mi, "shuqi", "DES");
//        System.out.println("DES加密解密");
//        System.out.println("加密hehhe,密文   >>>     "+mi);
//        System.out.println("解密"+mi+",明文   >>>     "+ming);
//        
//        mi = util.doubKeyEncoding("hehe", "shuqi", "DESede");
//        ming = util.doubKeyDencoding(mi, "shuqi", "DESede");
//        System.out.println("DESede加密解密");
//        System.out.println("加密hehhe,密文   >>>     "+mi);
//        System.out.println("解密"+mi+",明文   >>>     "+ming);
    
    /**
     * RSA算法的验证
     */
        try {
            //实例化一个密钥对生成器
            KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
            //得到密钥对对象
            KeyPair kp = kpg.genKeyPair();
            PrivateKey prikay  = kp.getPrivate();
            PublicKey  pubkey = kp.getPublic();
            
            String mi = util.rsaEncoding("shuqi", pubkey);
            String ming = util.rsaDeEncoding(mi, prikay);
            System.out.println(ming+" :: "+mi);
            
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

}
 
 
 

 

分享到:
评论

相关推荐

    JAVA上加密算法的实现用例

    在Java编程语言中,加密算法的实现是网络安全和数据保护的关键组成部分。本案例主要探讨了如何在Java中应用加密算法,以确保数据的安全传输和存储。`JAVA上加密算法的实现用例`这个主题涵盖了Java中加密算法的基本...

    SHA加密算法的js与Java的使用方法

    总之,SHA-256加密算法在JavaScript和Java中的使用方式虽然有所不同,但核心思想都是将明文信息转化为不可逆的摘要,以此来保护敏感数据,如用户密码。在实际项目中,应结合盐值和多次迭代等安全策略,以增强密码的...

    微信加密算法和接口验证信息

    为了保护用户数据和通信的隐私,微信采用了一系列的加密算法和接口验证机制。在这个Java实现的微信接口验证中,我们重点关注SHA1加密算法以及接口验证方法。 首先,SHA1(Secure Hash Algorithm 1)是一种广泛使用...

    Java小实验:文件读取加密保存

    - 常见的加密算法有AES(高级加密标准)、DES(数据加密标准)等。AES是目前广泛使用的对称加密算法,速度快,安全性高。 - 加密过程通常包括:选择加密算法,生成密钥,初始化Cipher对象,然后使用`doFinal()`...

    Java非对称加密源码实例

    在IT领域,非对称加密是一种重要的数据保护技术,它基于公钥/私钥对,为数据传输提供安全保障。Java作为广泛使用的编程...在实际开发中,开发者需要根据需求选择合适的加密算法,并注意密钥管理,以确保数据的安全性。

    Java加密技术

    Java中常用的哈希函数有MD5(Message-Digest Algorithm 5)和SHA系列(Secure Hash Algorithm)。例如,使用MessageDigest类可以实现对数据的哈希计算,生成的哈希值可以用于验证数据的完整性。 4. 数字签名: ...

    Java MD5 加密

    现在,更推荐使用SHA-256或更强的加密算法。 在给定的压缩包文件"MD5j加密"中,可能包含了一个Java项目或示例代码,用于演示如何在实际开发中应用上述步骤。这个例子可以帮助开发者更好地理解如何在Java环境中实现...

    《Java加密与解密的艺术》配书源代码

    加密过程中常需要随机数,Java的`java.security.SecureRandom`类提供了强随机数生成器,以满足安全需求。 8. **加密算法的选择** 不同的加密算法有不同的安全性和效率特性,选择合适的算法需要考虑应用场景、性能...

    JAVA MD5加密例子

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要用来生成一个固定长度的数字摘要,用于数据的完整性验证和身份认证。在Java中,我们可以利用`java.security.MessageDigest`类来实现MD5加密。下面...

    对称加密 非对称加密 需要的jar包

    Bouncy Castle为Java提供了额外的加密功能,比如对某些非标准或较新的加密算法的支持,这些可能在标准Java加密库中并未包含。这个jar包是使用Bouncy Castle库进行加密操作的必备组件。 2. **commons-codec-1.10.jar...

    Java 算法面试题 判断质数

    7. **应用实例**:质数判断在密码学(如RSA公钥加密算法)、图形学(如Prim生成最小生成树算法)等领域有广泛应用。 8. **复杂度分析**:上述优化后的判断方法的时间复杂度为O(sqrt(n)),空间复杂度为O(1),在实际...

    java 期末考试项目

    JUnit是Java中常用的单元测试框架,开发者需要了解如何编写和运行测试用例。 10. **版本控制**:项目文件名为“考试项目”,通常这类项目会使用版本控制系统如Git进行协作和版本管理。开发者需要了解基本的Git命令...

    Android数据加密之Base64编码算法的简单实现

    Base64编码是一种广泛应用于网络数据传输和存储的编码方式,尤其在XML、...此外,由于Base64编码是可逆的,因此它不提供安全性,仅适用于传输和存储数据,如果需要加密保护数据,应结合其他加密算法如AES、RSA等使用。

    java做的简单的银行系统

    JUnit是Java中常用的单元测试框架,而Mockito可以帮助模拟对象进行测试。Spring Boot的Actuator模块则提供了健康检查、指标收集等功能,便于系统监控和调试。 通过这个简单的银行系统项目,初学者可以学习到以上...

    Java类QQ程序源码

    JUnit是Java中常用的测试框架,而IDE如Eclipse或IntelliJ IDEA提供了强大的调试工具。 以上就是Java类QQ程序源码中涵盖的主要技术知识点,通过学习和分析这个项目,可以提升在Java编程、网络通信、多线程、GUI设计...

    java实现ICQ

    8. **安全性**:考虑到用户隐私和数据安全,实现时应考虑如何保护用户密码,可能需要使用哈希算法或加密技术。 9. **错误处理**:良好的错误处理机制是任何软件必不可少的部分。Java 提供了异常处理机制,通过 try-...

    Java登陆注册实例免费分享给大家

    Java中常用的数据库连接工具有JDBC(Java Database Connectivity),或者使用ORM(Object-Relational Mapping)框架如Hibernate或MyBatis,它们简化了数据库操作。你需要创建用户表,包含用户名、密码等字段,并处理...

    java-ATM.rar_ATM柜员机模拟_site:www.pudn.com

    JUnit是Java中常用的单元测试框架,可以编写测试用例来验证各个功能的正确性。 9. **文档编写**:项目中的"java ATM.doc"可能是对系统设计、实现过程或API的详细说明。良好的文档可以帮助理解和维护代码。 总的来...

    即时到账 Java Demo.zip

    JUnit是Java中常用的单元测试框架,可以用于测试单个方法的功能。Mockito或EasyMock等库则可以帮助模拟依赖,以便进行隔离测试。对于整个支付流程的测试,可能需要用到像Selenium这样的工具来进行端到端的集成测试。...

    RC4_DES_operation7xd_des_DESalgorithm_

    RC4是由Ron Rivest在1987年设计的一种流加密算法,它使用一个密钥生成一个伪随机字节序列,然后用这个序列与明文异或进行加密。RC4因其快速和简单而广泛应用于各种场合,但同样由于其密钥和内部状态的弱点,现在也被...

Global site tag (gtag.js) - Google Analytics