`
齐晓威_518
  • 浏览: 618087 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

JAVA 常用加密方法

 
阅读更多

1.Base64
  加密:org.apache.commons.codec.binary.Base64.encodeBase64(byte[] binaryData)
  解密:org.apache.commons.codec.binary.Base64.decodeBase64(byte[] base64Data)
2.Md5
  加密:org.apache.commons.codec.digest.md5Hex(byte[] data)
  解密:无
3.DES(des-ecb,3des,des-cbc,cbc-mac)

view plaincopy to clipboardprint?
 import java.io.ByteArrayOutputStream;  
import java.security.SecureRandom;  
import java.util.Arrays;  
 
import javax.crypto.Cipher;  
import javax.crypto.SecretKey;  
import javax.crypto.SecretKeyFactory;  
import javax.crypto.spec.DESKeySpec;  
import javax.crypto.spec.DESedeKeySpec;  
import javax.crypto.spec.IvParameterSpec;  
import javax.crypto.spec.SecretKeySpec;  
 
import org.bouncycastle.crypto.BlockCipher;  
import org.bouncycastle.crypto.Mac;  
import org.bouncycastle.crypto.engines.DESEngine;  
import org.bouncycastle.crypto.macs.CBCBlockCipherMac;  
import org.bouncycastle.crypto.params.KeyParameter;  
 
import com.alibaba.common.lang.StringUtil;  
import com.huateng.commons.lang.convert.HexUtils;  
 
public class ShfftDes {  
    //验证用密钥  
    private byte[]              key         = "000000000000000000000000".getBytes();  
 
    //    private byte[]              key         = Hex.decode("00000000");  
 
    private byte[]              ivs         = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };  
 
    private static final String DES_EDE     = "DESede/ECB/NoPadding";               //定义 加密算法,可用 DES,DESede,Blowfish        //keybyte为加密密钥,长度为24字节    //src为被加密的数据缓冲区(源)  
 
    private static final String DES_EDE_CBC = "DESede/CBC/NoPadding";               //定义 加密算法,可用 DES,DESede,Blowfish        //keybyte为加密密钥,长度为24字节    //src为被加密的数据缓冲区(源)  
 
    private static final String DES_CBC     = "DES/CBC/NoPadding";  
 
    private static final String DES_ECB     = "DES/ECB/PKCS5Padding";  
 
     
    public byte[] CryptByDes(byte[] content, int mode) throws Exception {  
        Cipher cipher = Cipher.getInstance(DES_ECB);  
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  
        SecretKey secretKey = keyFactory.generateSecret(new DESKeySpec(key));  
        cipher.init(mode, secretKey);  
        return cipher.doFinal(content);  
    }  
 
     
    public byte[] CryptBy3Des(byte[] content, int mode) throws Exception {  
        Cipher cipher = Cipher.getInstance(DES_EDE);  
        SecretKey secretKey = new SecretKeySpec(key, "DESede");  
        cipher.init(mode, secretKey);  
        return cipher.doFinal(content);  
    }  
 
     
    public byte[] CryptByDesCbc(byte[] content, int mode) throws Exception {  
        Cipher cipher = Cipher.getInstance(DES_CBC);  
        SecretKey secureKey = new SecretKeySpec(key, "DES");  
        IvParameterSpec iv = new IvParameterSpec(ivs);  
        cipher.init(mode, secureKey, iv);  
        return cipher.doFinal(HexUtils.fromHex(new String(content)));  
    }  
 
     
    public byte[] CryptBy3DesCbc(byte[] content, int mode) throws Exception {  
        Cipher cipher = Cipher.getInstance(DES_EDE_CBC);  
        SecretKey secureKey = new SecretKeySpec(key, "DESede");  
        IvParameterSpec iv = new IvParameterSpec(ivs);  
        cipher.init(mode, secureKey, iv);  
        return cipher.doFinal(content);  
    }  
 
     
    public byte[] CryptByDesCbcMac(byte[] content) throws Exception {  
        BlockCipher engine = new DESEngine();  
        Mac mac = new CBCBlockCipherMac(engine, 64);  
        byte[] macText = new byte[engine.getBlockSize()];  
        mac.init(new KeyParameter(key));  
        mac.update(Padding(content, 64), 0, content.length);  
        mac.update(content, 0, content.length);  
        mac.doFinal(macText, 0);  
        return macText;  
    }  
 
     
    public byte[] ShFftCryptByDessdsCbc(byte[] content, int mode) throws Exception {  
        byte[] ks1 = HexUtils.fromHex(new String(key));  
        byte[] ks = new byte[24];  
        System.arraycopy(ks1, 0, ks, 0, ks1.length);  
        System.arraycopy(ks1, 0, ks, ks1.length, 8);  
 
        Cipher cipher = Cipher.getInstance(DES_EDE_CBC);  
        SecretKeyFactory keyFactory = null;  
        keyFactory = SecretKeyFactory.getInstance("DESede");  
        SecretKey secretKey = null;  
        secretKey = keyFactory.generateSecret(new DESedeKeySpec(ks));  
        IvParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });  
        cipher.init(mode, secretKey, iv);  
        return cipher.doFinal(HexUtils.fromHex(new String(content)));  
    }  
 
    public byte[] mac(byte[] content) throws Exception {  
        int len;  
        byte plainData[];  
        byte encryptedData[];  
        len = (content.length / 8 + (content.length % 8 != 0 ? 1 : 0)) * 8;  
        plainData = new byte[len];  
        encryptedData = new byte[8];  
        Arrays.fill(plainData, (byte) 32);  
        System.arraycopy(content, 0, plainData, 0, content.length);  
        SecureRandom sr = new SecureRandom();  
        DESKeySpec dks = new DESKeySpec(key);  
        SecretKeyFactory keyFactory = null;  
        keyFactory = SecretKeyFactory.getInstance("DES");  
        SecretKey secretKey = keyFactory.generateSecret(dks);  
        Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");  
        IvParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });  
        cipher.init(1, secretKey, iv, sr);  
        System.arraycopy(cipher.doFinal(plainData), len - 8, encryptedData, 0, 8);  
        return encryptedData;  
    }  
 
     
    public byte[] Padding(byte[] content, int block) {  
        int contentLength = content.length;  
        int mod = contentLength % block;  
        if (mod != 0) {  
            int size = contentLength + block - mod;  
            //            String s = new String(content);  
            //            StringUtil.alignLeft(s, size, " ");  
            byte[] s = new byte[size];  
            System.arraycopy(content, 0, s, 0, content.length);  
            for (int i = content.length; i < size; i++) {  
                s[i] = 32;  
            }  
            return s;  
        }  
        return content;  
    }  
 
     
    public String Padding(String content, int block) {  
        int contentLength = content.length();  
        int mod = contentLength % block;  
        if (mod != 0) {  
            int size = contentLength + block - mod;  
            String s = new String(content);  
            StringUtil.alignLeft(s, size, " ");  
            return s;  
        }  
        return content;  
    }  
 
     
    public void println(byte[] bs) {  
        for (byte b : bs) {  
            System.out.print(b + " ");  
        }  
        System.out.println();  
    }  
 
     
    public void printlnByte(byte[] bs) {  
        for (byte b : bs) {  
            if (b < 0) {  
                System.out.print((int) b + 256 + " ");  
            } else {  
                System.out.print(b + " ");  
            }  
        }  
        System.out.println();  
    }  
 
     
    public void printlnByteInt16(byte[] bs) {  
        for (byte b : bs) {  
            System.out.print(Integer.toHexString((int) b) + " ");  
        }  
        System.out.println();  
    }  
 
     
    public String dumpBytes(byte[] bytes) {  
        int i;  
        StringBuffer sb = new StringBuffer();  
        for (i = 0; i < bytes.length; i++) {  
            int n = bytes[i] >= 0 ? bytes[i] : 256 + bytes[i];  
            String s = Integer.toHexString(n);  
            if (s.length() < 2) {  
                s = "0" + s;  
            }  
            if (s.length() > 2) {  
                s = s.substring(s.length() - 2);  
            }  
            sb.append(s);  
        }  
        return sb.toString().toUpperCase();  
        //return new BASE64Encoder().encode(bytes);  
    }  
 
    // 一下程序将每2位16进制整数组装成一个字节  
    private String hexString = "0123456789ABCDEF";  
 
    public byte[] decode(String bytes) {  
        ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length() / 2);  
        for (int i = 0; i < bytes.length(); i += 2)  
            baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString.indexOf(bytes  
                .charAt(i + 1))));  
        return baos.toByteArray();  
    }  
 
    public byte[] getKey() {  
        return key;  
    }  
 
    public void setKey(byte[] key) {  
        this.key = key;  
    }  
 
    public byte[] getIvs() {  
        return ivs;  
    }  
 
    public void setIvs(byte[] ivs) {  
        this.ivs = ivs;  
    }  
 

分享到:
评论

相关推荐

    Java中常用加密/解密方法详解

    本文主要介绍了Java中常用加密/解密方法。具有很好的参考价值,下面跟着小编一起来看下吧

    Java常用的对密码加密的方法(MD5,SHA)

    Java作为一种广泛应用的编程语言,提供了多种密码加密方法来确保数据的安全性。...在`CodeUtil.java`文件中,你可以看到如何在Java程序中实现这两种加密方法,这对于理解和应用密码学原理非常有帮助。

    常用加密工具类(JAVA).zip

    本资源包“常用加密工具类(JAVA).zip”提供了12个不同的加密和排序工具类,以及一个log4j配置文件,旨在帮助开发者更方便地处理这些常见任务。以下是这些工具类及配置文件的详细介绍: 1. **MD5加密**:MD5...

    java密码加密方法

    ### Java密码加密方法详解 #### 一、引言 在当今数字化时代,数据安全成为企业和个人最为关注的问题之一。加密技术作为保障数据安全的关键手段,其重要性不言而喻。Java作为一种广泛应用的编程语言,提供了多种...

    Java文本文件加密与解密

    本次使用JAVA语言,采用3DES加密算法进行对文本文件的加密,通过二进制和十六进制的转换来实现,产生加密文件,再对加密文件进行解密。 关键词:DES加密算法、加密、解密。摘要 随着现代网络技术的飞速发展,人们...

    Java中常用的加密算法应用

    Java中的加密算法在信息安全领域扮演着重要角色,用于保护数据的隐私性和完整性。本文将详细介绍在Java中常见的三种加密算法:MD5、SHA以及RSA,并探讨它们的应用场景和实现方式。 1. MD5(Message-Digest ...

    java常用几种加密算法

    ### Java常用几种加密算法 在Java开发中,数据的安全性是非常重要的一个方面,尤其是在网络通信、数据存储等场景下,合理的使用加密算法可以有效保护数据安全。本文将详细介绍几种常用的Java加密算法及其应用实例,...

    Java常用的加密算法

    根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。 对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的...

    JAVA数据加密方面的资料

    Java数据加密是一个重要的安全领域,它涉及到保护敏感信息、防止数据泄露和确保网络通信的隐私。在这个主题中,我们将深入探讨三个关键知识点:Java中的类加载器(ClassLoader)在加密解密中的应用、常见的加密算法...

    JAVA文件加密打包实例

    在Java中,最常用的方式是使用ZIP格式打包文件。我们可以使用`java.util.zip`包中的`ZipOutputStream`和`ZipEntry`来实现。以下是一个简单的示例: 1. 创建`ZipOutputStream`对象,指定输出的ZIP文件路径。 2. 遍历...

    加密典型代码(java)

    本资料包“加密典型代码(java)”旨在帮助开发者学习如何在Java环境中编写加密程序,包括有密钥和无密钥(也称为对称加密和非对称加密)两种主要的加密方式。 对称加密是基于相同的密钥进行数据加密和解密的方法,...

    浅析Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)

    Java 常用的 4 种加密方式(MD5+Base64+SHA+BCrypt) Java 加密是指使用 Java 语言来实现数据加密、解密和数字签名等操作。数据加密是指将明文数据转换为难以理解的密文,以保护数据的机密性和完整性。Java 提供了...

    JCT - java加密解密工具包.zip_Java加密_java 加密_jct java_加密 解密_加密工具

    Java加密解密工具包,通常用于保护敏感数据的安全,防止未经授权的访问或篡改。这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关...

    java常用加密方式.pdf

    这种加密方法速度快,适用于大量数据的加密。Java中常见的对称加密算法包括DES(Data Encryption Standard)、IDEA(International Data Encryption Algorithm)、RC2、RC4、SKIPJACK、RC5和AES(Advanced ...

    Java中常用的加密方法(JDK)

    Java中的加密方法主要涉及到数据的安全保护,通过特定的算法对数据进行编码,防止未经授权的访问。在Java的JDK中,提供了多种加密方法,包括对称加密和非对称加密。这里我们主要讨论对称加密,因为它是Java中最常用...

    关于Java中常用加密/解密方法的实现

    一、常用的加密/解密算法 1.Base64  严格来说Base64并不是一种加密/解密算法,而是一种编码方式。Base64不生成密钥,通过Base64编码后的密文就可以直接“翻译”为明文,但是可以通过向明文中添加混淆字符来达到...

    用Java实现的图片加密程序

    在IT领域,尤其是在信息安全和数据保护方面,图片加密是一种常用的技术手段。本项目"用Java实现的图片加密程序"正是关注这一主题,它利用Java的IO流处理技术,实现了对图片文件的加密和解密功能。以下是关于这个项目...

    java 文字加密实例

    Java提供了多种加密算法的支持,其中最常用的包括: 1. **对称加密算法**:这类算法使用相同的密钥进行加密和解密。常见的有AES(高级加密标准)、DES(数据加密标准)等。 2. **非对称加密算法**:这类算法使用...

    java常用类-MD5加密与DES加密解密

    java中常用的工具类,用于MD5的加密,里面还有切割了MD5加密的长度,有DES加密与解密,并且配有main函数可测试,可以根据自己的实际情况使用main函数测试使用

Global site tag (gtag.js) - Google Analytics