Java代码Base64加密解密使用

Java代码Base64加密解密使用

       程序中有时候需要把用户名和密码保存到本地,下次登录时自动获取,如果是直接使用字符串保存,肯定容易泄露密码,这就需要经过加密,但是登录时还要获取密码,这就需要解密,这个Base64类就能简单的实现这个功能。

一.简单介绍一下加密的知识:

       不想讲太多高深的知识,讲一点基础的。

(一)简单的java加密算法有:

1.BASE64 严格地说,属于编码格式,而非加密算法

2.MD5(Message Digest algorithm 5,信息摘要算法)

3.SHA(Secure Hash Algorithm,安全散列算法)

4.HMAC(Hash Message Authentication Code,散列消息鉴别码)

       上面的加密我也是用得比较少,其实用起来并不难,使用的话,都要导入对应的jar,具体的操作代码网上都是可以查到的,发生类错误就是导的包不对!每一种jar包都有不同的版本!

(二)对称算法和不对称算法

1. 对称加密(Symmetric Cryptography)

       对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。 
       对称加密解密时间都是非常快的。 
       2.非对称加密(Asymmetric Cryptography) 
       非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个(公钥)进行加密,而解密则需要另一个(私钥)密钥。 
       非对称解密是非常慢的,很简单的数据可能都要几个小时!

3.常见的对称加密和非对称加密算法

(1)对称加密算法:

       在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。

       DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。 
       3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。 
       AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;

(2)非对称常用算法

       RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

(三)其他

       Base64还不算加密算法,其实就是一种编码转换; 
       MD5、SHA是非对称加密算法

二.Base64的编码示例

(一)导入jar包:BASE64Decoder jar包

下载地址:http://download.csdn.net/detail/wenzhi20102321/9805051

(二)代码

1.加密代码:

加密前字符串:String key="mykey"; 
byte[] bt = key.getBytes(); 
加密后字符串:String newKey=(new BASE64Encoder()).encodeBuffer(bt); 
  • 1
  • 2
  • 3

2.解密代码:

加密后的字符串:String newkey="*****"; 
byte[] bt = (new BASE64Decoder()).decodeBuffer(key); 解密后的字符串: String key=new String(bt); 
//如果出现乱码可以改成: String(bt, "utf-8")或 gbk
  • 1
  • 2
  • 3

3.具体调用代码示例

package com.example.encryption;

import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;

import java.io.IOException;

/**
 * 加密解密程序示例
 * <p/>
 * <p/>
 * /**
 * 编码工具类
 * 1.将byte[]转为各种进制的字符串
 * 2.base 64 encode
 * 3.base 64 decode
 * 4.获取byte[]的md5值
 * 5.获取字符串md5值
 * 6.结合base64实现md5加密
 * 7.AES加密
 * 8.AES加密为base 64 code
 * 9.AES解密
 * 10.将base 64 code AES解密
 *
 * @author uikoo9
 * @version 0.0.7.20140601
 */
public class EncryptionDemo {

    public static void main(String[] args) {
        String s = "我的字符串seasonszx";
        System.out.println("原字符串:" + s);
        String encryptString = encryptBASE64(s);
        System.out.println("加密后:" + encryptString);
        System.out.println("解密后:" + decryptBASE64(encryptString));
    }

    /**
     * BASE64解密
     *
     * @param key
     * @return
     * @throws Exception
     */
    public static String decryptBASE64(String key) {
        byte[] bt;
        try {
            bt = (new BASE64Decoder()).decodeBuffer(key);
            return new String(bt);//如果出现乱码可以改成: String(bt, "utf-8")或 gbk
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * BASE64加密
     *
     * @param key
     * @return
     * @throws Exception
     */
    public static String encryptBASE64(String key) {
        byte[] bt = key.getBytes();
        return (new BASE64Encoder()).encodeBuffer(bt);
    }
}

       程序运行后结果: 
原字符串:我的字符串seasonszx 
加密后:5oiR55qE5a2X56ym5Liyc2Vhc29uc3p4 
解密后:我的字符串seasonszx

       这就是Base64加密解密,加密后的字符串,一般都是不能识别的。同时也是很方便解密。也可以把上面的代码封装成一个工具类以后使用。

猜你喜欢

转载自blog.csdn.net/thedarkclouds/article/details/81382769