widows和Linux java加密注意事项

/**
 * @Title: EncrypAES.java
 * @Package com.weidinghuo.payment.util
 * @Description: TODO(用一句话描述该文件做什么)
 * @author liyongdong
 * @date 2016年8月17日 下午2:45:49
 */
package com.weidinghuo.payment.util;

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.apache.shiro.codec.Base64;

import com.weidinghuo.base.log.BaseLog;

/**
 * @ClassName: EncrypAES
 * @Description: TODO(对称加密)
 * @author liyongdong
 * @date 2016年8月17日 下午2:46:09
 */
public class EncrypAES extends BaseLog {

/**
     * 加密
     *
     * @param content
     *            需要加密的内容

widows和Linux生成密文兼容方式
     * @param password
     *            加密密码
     * @return
     * @throws NoSuchAlgorithmException
     * @throws NoSuchPaddingException
     */
    public static byte[] encrypt(String content, String password) throws Exception {
         KeyGenerator kgen = KeyGenerator.getInstance("AES");  
         SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );   
         secureRandom.setSeed(password.getBytes());   
         kgen.init(128, secureRandom);  
         SecretKey secretKey = kgen.generateKey();  
         byte[] enCodeFormat = secretKey.getEncoded();  
         SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  
         Cipher cipher = Cipher.getInstance("AES");// 创建密码器  
         byte[] byteContent = content.getBytes("utf-8");  
         cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化  
         byte[] result = cipher.doFinal(byteContent);  
         return result; // 加密
    }

/**
     * 解密
     *
     * @param content
     *            待解密内容
     * @param password
     *            解密密钥
     * @return
     */
    public static byte[] decrypt(byte[] content, String password) throws Exception{
        KeyGenerator kgen = KeyGenerator.getInstance("AES");  
        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );   
        secureRandom.setSeed(password.getBytes());   
        kgen.init(128, secureRandom);  
        SecretKey secretKey = kgen.generateKey();  
        byte[] enCodeFormat = secretKey.getEncoded();  
        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  
        Cipher cipher = Cipher.getInstance("AES");// 创建密码器
        cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
        byte[] result = cipher.doFinal(content);
        return result; // 解密
    }

/**
     * 将二进制转换成16进制
     *
     * @param buf
     * @return
     */
    public static String parseByte2HexStr(byte buf[]) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < buf.length; i++) {
            String hex = Integer.toHexString(buf[i] & 0xFF);
            if (hex.length() == 1) {
                hex = ‘0‘ + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }

/**
     * 将16进制转换为二进制
     *
     * @param hexStr
     * @return
     */
    public static byte[] parseHexStr2Byte(String hexStr) {
        if (hexStr.length() < 1)
            return null;
        byte[] result = new byte[hexStr.length() / 2];
        for (int i = 0; i < hexStr.length() / 2; i++) {
            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
            result[i] = (byte) (high * 16 + low);
        }
        return result;
    }

/**
     * @Title: encryptCode
     * @Description: TODO(可逆aes加密)
     * @param content
     * @param password
     * @return 参数说明
     *         String 返回类型
     * @throws
     */
    public static String encryptCode(Object content, String password) throws Exception {
        byte[] encode = encrypt(content.toString(), password);
        return new String(Base64.encode(encode));
    }

/**
     * @Title: decryptCode
     * @Description: TODO(解密)
     * @param content
     *            解密密文
     * @param password
     *            密钥
     * @return string
     * @throws UnsupportedEncodingException
     */

public static String decryptCode(Object content, String password) throws Exception {
        byte[] decode = Base64.decode(content.toString());
        byte[] decryptResult = decrypt(decode, password);
        return new String(decryptResult, "UTF-8");
    }

}

时间: 2024-10-11 12:27:26

widows和Linux java加密注意事项的相关文章

Linux的加密工具以及ssh

1.linux下加密工具有很多,但是最常用的还是openssl openssl 三个组件: openssl 多用途命令行工具 libcrypto 加密解密库 libssl  ssl协议实现 openssl enc, ca, req, ... 对称加密 enc命令:#手动给文件加密一个文件. 加密:openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext 解密:openssl enc -d -des3 -a -salt -in fs

java加密MD5,DES

des,可以直接拿过去用的,,,不用深入了解算法的整个过程 package com.hotel.EncryptionAndDecryption; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.security.InvalidKeyException; import java.s

des加密解密——java加密,php解密

最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混杂,好不容易测试在php这边测试加密和解密成功了.为确保安卓app端提交过来的加密参数能够解密出来,给定安卓人员一个字符串,让他们把des加密后的字符串给我,在php这边解密.结果一看,加密出来的字符串跟我这边加密出来的结果不一致,自然是解密不出来. 要来java的des算法代码,研究加密的过程,其

Linux分区加密保护数据

一.首先创建分区 二.创建新的加密卷 加密分区 解密分区 创建文件系统 创建挂载点,然后挂载 卸载加密卷,并锁定加密的卷 下次要是再想使用这个加密卷怎么办? 再次打开加密卷就OK啦! 关于上面的图片解释下,作者刚刚改变映射名称时候,手动是可以挂载和打开的,第一次不知道怎么回事,挂载不上去,说是文件系统不对,搞了好一会都不知道怎么回事,所以重新格式化了一下,即重做文件系统: mkfs.ext4 /dev/mapper/jiami,第一次做的映射名是mydisk,建议这个映射名还是不要改的好,每次打

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

java加密解密算法位运算

一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算会把加密后的字符串还原为原有字符串的值.效果图如下: 二.实现过程 1 package com.itxxz; 2 3 import java.util.Scanner; 4 5 /** 6 * java加密解密算法 7 * 8 * @author 螃蟹 9 * 网站:IT学习者 10 * 网址:ht

java加密基础(一) —— BASE64编码

工作之后第一次接触到java加密机制,当时需求是使用RSA做数字签名.当时看到之后一脸懵逼,就查了各种资料. 对于学习过程中我走了不少弯路,主要是因为不知道先看什么在看什么.下面说一下我的学习经历 首先,要了解BASE64算法,因为java加密基本上都用到了BASE64:然后就是对称加密和非对称加密了(下一章节着重介绍,这里就不多做描述了):最后就是了解下数字签名(会在第三章节中介绍到) 我们都知道ASCII字符一共有256,而计算机记录数据的方式只有0.1,所以就只能使用8bit才能表示一个A

linux CA 加密解密技术

一.基础知识 对称加密: 加密和解密方使用同一个密钥,用来解决数据机密性,但是密钥通过何种方式传递给对方不容易实现: 公钥加密: 密钥是成对出现的,分别为Secret key(密钥)和Public key(公钥)公钥加密必须使用与其相对应的 私钥进行解密并且公钥是从私钥中提取出来的,有私钥可以知道公钥是什么,但是知道公钥是不能知 道私钥的,公钥是公开的,而私钥是不公开的,但是公钥加密比对称加密慢3个数量级(1000倍), 加密速度相当的慢,所以单独用此加密方式也比较困难:公钥加密功能: 单向加密

Java加密解密字符串

http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串 旧文重发:http://www.blogjava.net/vwpolo/archive/2009/12/05/304874.html#383365 import java.security.Key; import java.security.Security; import javax.crypto.Cipher; /** * DES加密和解密工具,