`

Java密码学(1)——Base64算法

 
阅读更多

最近想总结一下以前用到的密码学知识用java实现,准备汇总成一个系列

初步决定包含以下内容:

  1. 传输算法Base64
  2. 验证数据完整性:消息摘要算法
  3. 对称加密算法
  4. 非对称加密算法
  5. 带密钥的消息摘要算法:数字签名算法
  6. 数字证书
  7. 安全协议HTTPS
  • 热身准备

大部分算法可以通过Sun的JDK实现,但有更简单的第三方包可以帮助我们。

我采用的是commons-codec,下载地址http://commons.apache.org/proper/commons-codec/

下载是最新的commons-codec-1.9.jar

 

使用commons-codec有很多方便的地方,比如JDK实现MD5算法返回的是byte[],commons-codec可以直接返回String类型,并且支持输入参数为byte[]、String、InputStream等各种形式。

实例里面用到commons-codec会特别说明。

 

最后介绍密钥的存储形式。

对一个8字节的密钥

用String存储可以表示为String key = "4041424344454647";

用byte[]存储可以表示为byte[] key = new byte[]{0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};

两者之间可以通过commons-codec的Hex类进行转换

String转换为byte[]

String key = "4041424344454647";
byte[] b = Hex.decodeHex(key.toCharArray());

 byte[]转换为String

byte[] key = new byte[]{0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
String s = Hex.encodeHexString(key);

 

  •  Base64算法实现

 介绍第一个算法——Base64。

Base64算法是对一个字符串进行编码和解码,算不上真正的加密算法。

 

用commons-codec的代码实现

	/**
	 * BASE64编码
	 * @param data
	 * @return
	 */
	public static String Base64encode(String data) {
		try {
			byte[] b = Base64.encodeBase64(data.getBytes(ENCODING));
			return new String(b, ENCODING);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * BASE64解码
	 * @param data
	 * @return
	 */
	public static String Base64decode(String data) {
		try {
			byte[] b = Base64.decodeBase64(data.getBytes(ENCODING));
			return new String(b, ENCODING);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}

 测试代码

String data = "yeliang";
System.out.println("原文:"+data);
		
String encode = Base64encode(data);
System.out.println("Base64编码后:"+encode);
String decode = Base64decode(encode);
System.out.println("Base64解码后:"+decode);

 运行结果

原文:yeliang
Base64编码后:eWVsaWFuZw==
Base64解码后:yeliang

 

  • Base64算法的典型应用

电子邮件传输

数字证书存储

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics