java Aes256 加密算法的实现

如果希望进行AES256位的加密解密,需要事先从java官网下载 local_policy.jar与US_export_policy.jar替换%JAVA_HOME%/jre/lib/security的两个policy文件,local_policy.jar与US_export_policy .jar。 主要是为了突破AES算法只能支持到128位的限制。如果未替换,可能会得到如下错误: *

java.security.InvalidKeyException: Illegal key

package com.jlins;

import java.io.UnsupportedEncodingException;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import com.jlins.util.Hex;

/**

* java Aes256 加密

*

* @author jlins

*

*/

public class Aes256Encryptor {

// 说明 key 需要大家自己去设定加密解密的key,key牵涉到安全信息,所以这里无法公布

    private static final byte[] key = {};

    private static final String transform = "AES/CBC/NoPadding";

    private static final String algorithm = "AES";

    private static final SecretKeySpec keySpec = new SecretKeySpec(key, algorithm);

    public static void main(String[] args) throws Exception {

         String pwds[] = { "123", "0123456789012345", "01234567890123456", "123", "123", "0123456789012345678",

                            "012345678901234567890123456789", "b", "0123456789012345", "01234567890123456", "012345678901234567" };

        String ivss[] = { "test", "test", "test", "test0123456789012", "test01234567890123", "test", "test", "a",

                        "test", "test", "test" };

        String rr[] = new String[ivss.length];

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

            String en = encrypt(pwds[i], ivss[i]);

            String decy = decrypt(en, ivss[i]);

            rr[i] = "[" + ivss[i] + "],[" + decy + "]-->[" + en + "]";

            System.out.println(rr[i]);

           }

           System.out.println("---------");

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

               System.out.println(rr[i]);

            }

}

/**

*/

public static String decrypt(String pHexText, String pIv) throws Exception {

        Cipher cipher = Cipher.getInstance(transform);

        byte[] encryptedBytes = Hex.decode(pHexText);

        byte[] iv = createIV(pIv);

        cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv));

        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);

        System.arraycopy(decryptedBytes, 0, encryptedBytes, 0, encryptedBytes.length);

        String result = new String(encryptedBytes);

        return result.trim();

}

/**

*/

public static String encrypt(String pData, String pIv) throws Exception {

         Cipher cipher = Cipher.getInstance(transform);

         byte[] iv = createIV(pIv);

         cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv));

         byte[] output = cipher.doFinal(paddingData(pData));

         byte[] encryptedContent = new byte[output.length];

         System.arraycopy(output, 0, encryptedContent, 0, encryptedContent.length);

         String result = new String(Hex.encode(encryptedContent)).toUpperCase();

         return result;

}

/**

* 补齐的16位的整数倍

*

* @param pData

* @return

*/

private static byte[] paddingData(String pData) {

       byte[] bytes = pData.getBytes();

       int length = bytes.length / 16;

       if (length * 16 < bytes.length) {

          length++;

        }

       byte[] result = new byte[length * 16];

       System.arraycopy(bytes, 0, result, 0, bytes.length);

       for (int i = bytes.length; i < result.length; i++) {

         result[i] = 0x00;

        }

        return result;

        }

/**

* 初始化向量到16位

* */

       private static byte[] createIV(String pIv) throws UnsupportedEncodingException {

       byte[] bytes = pIv.getBytes("US-ASCII");

       int length = bytes.length / 16;

       if (length * 16 < bytes.length) {

       length++;

       }

       byte[] result = new byte[16];

       System.arraycopy(bytes, 0, result, 0, bytes.length > 16 ? 16 : bytes.length);

       for (int i = bytes.length; i < result.length; i++) {

       result[i] = 0x00;

      }

      return result;

}

}

原文地址:http://www.itmmd.com/201411/98.html

该文章由 android开发 整理发布,转载须标明出处。。

时间: 2024-08-23 10:16:16

java Aes256 加密算法的实现的相关文章

java单向加密算法小结(1)--Base64算法

java单向加密算法小结(1)--Base64算法 从这一篇起整理一下常见的加密算法以及在java中使用的demo,首先从最简单的开始. 简单了解 Base64严格来说并不是一种加密算法,而是一种编码/解码的实现方式. 我们都知道,数据在计算机网络之间是使用字节流的方式进行传递的,所有的信息都要最终转换为0101的二进制,这本身就涉及到编码,解码的应用. Base64,顾名思义,是使用了64个基本的字符来对任意数据进行编码的一种实现方式,那既然有Base64,是不是也有Base32,Base16

JAVA 上加密算法的实现用例---转载

通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman 的使用. 第 1 章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.但是加密的安全性依靠密钥保管的安全性 , 在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并

Java非对称加密算法--RSA加密算法

Java非对称加密算法--RSA加密算法          RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. 1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相

java HMAC_SHA1加密算法

java HMAC_SHA1加密算法 CreationTime--2018年7月14日16点46分 Author:Marydon 1.准备工作 import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.log4j.Logger; /** * HMAC_SHA1加密算法工具类 * @explain 不可逆算法 * @author

Java基本加密算法

简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) 1. BASE64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于

java常用加密算法

常用加密算法的Java实现(一) ——单向加密算法MD5和SHA 日期:2014/6/1 文:阿蜜果 1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.security包(及其子包),以及sun.securityAPI包(及其子包)中.设计用于帮助开发人员在程序中同时使用低级和高级安全功能. JDK 1.1 中第一次发布的 JDK 安全中引入了“Java

Java RSA加密算法生成公钥和私钥

原文:http://jingyan.baidu.com/article/6dad5075f33466a123e36ecb.html?qq-pf-to=pcqq.c2c 目前为止,RSA是应用最多的公钥加密算法,能够抵抗已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. RSA算法中,每个通信主体都有两个钥匙,一个公钥(Public Key)用来对数据进行加密: 一个私钥(Private Key)用来对数据进行解密. 下面来看下Java中是如何使用KeyPairGenerator生成key

JAVA 非对称加密算法RSA

非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAPublicKey.RSAPrivateKey 2.甲方使用私钥加密, 加密后在用私钥对加密数据进行数据签名,然后发送给乙方 RSACoder.encryptByPrivateKey(data, privateKey); RSACoder.sign(encodedData, privateKey); 3.乙方则

java RSA加密算法

[转]RSA加密算法 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准.RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥. RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密