当前位置:首页 > 开发 > 互联网 > 正文

数字签名与加密的区别

发表于: 2015-04-22   作者:cfyme   来源:转载   浏览次数:
摘要: 数字签名更多是用来校验信息有没有被修改过,而加密可以彻底杜绝防止别人看到信息内容   SHA-1 和 MD5算法    严格说来它们不算是加密算法,只能说是摘要算法。 SHA-1算法:Security Hash Algorithm 安全哈希算法, 它可以把长度不超过2的64次方位的信息转换成160位(20字节)长的散列值   MD5算法:Mes

数字签名更多是用来校验信息有没有被修改过,而加密可以彻底杜绝防止别人看到信息内容

 

SHA-1 和 MD5算法 

 

严格说来它们不算是加密算法,只能说是摘要算法。

SHA-1算法:Security Hash Algorithm 安全哈希算法, 它可以把长度不超过2的64次方位的信息转换成160位(20字节)长的散列值

 

MD5算法:Message Digest 信息摘要算法, 散列长度是128位,16个字节。它对输入以512位分组,输出是4个32位字的级联。

 

CRC算法:循环冗余校验,碰撞几率比较高

 

加密技术可以分为对称非对称两种.

对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等

 

而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等

 

  例如DES对称加密代码:  

/**
 * 给用户id和设备id进行加密,添加时间属性 * 
 * @param userId
 * @return
 */
public static String encode(Long userId, Long deviceId) {
	try {
		Random random = new Random();
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < 16; i++) {
			sb.append(values[random.nextInt(values.length - 1)]);
		}
		String randomCode = sb.toString();
		SecretKey deskey = new SecretKeySpec((randomCode + KEYPREFIX).getBytes("utf-8"), "DESede"); // 加密
		Cipher c1 = Cipher.getInstance("DESede");
		c1.init(Cipher.ENCRYPT_MODE, deskey);
		String str = "";
		String time=new SimpleDateFormat("yyyyMM").format(new Date());
		if (deviceId != null && deviceId > 0) {
			str = Tf8Base64.base32Encode(c1.doFinal(String.valueOf(userId + SEP + deviceId+SEP+Long.valueOf(time)).getBytes("utf-8")));
		} else {
			str = Tf8Base64.base32Encode(c1.doFinal(String.valueOf(userId).getBytes("utf-8")));
		}

		return URLEncoder.encode(UNDERLINE + str + randomCode, "utf-8");
	} catch (Exception e) {
		log.error("error happens when encode userId for " + userId + ",error info is " + e.getMessage(), e);
	}
	return "";
}

 

   DES 解密

  

	/** 
	 * @param code
	 * @return
	 */
	public static String decode(String code) {
		try {			
			code = URLDecoder.decode(code, "utf-8");
			String userId = code.substring(0, code.length() - 16);
			String randomCode = code.substring(code.length() - 16);
			SecretKey deskey = new SecretKeySpec((randomCode + KEYPREFIX).getBytes("utf-8"), "DESede"); // 解密
			Cipher c1 = Cipher.getInstance("DESede");
			c1.init(Cipher.DECRYPT_MODE, deskey);

			return new String(c1.doFinal(Tf8Base64.base32Decode(userId)));
		} catch (Exception e) {
			log.error("error happens when decode code for " + code + ",error info is " + e.getMessage(), e);
		}
		return "";
	}

 

数字签名与加密的区别

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
有关数字签名与加密解密的文章我看了许多次,基于这样的事实——我总是说服不了自己,所以每次看都
接下来我们介绍DSA数字签名,非对称加密的另一种实现。 DSA DSA-Digital Signature Algorithm 是Sch
转自:http://snowolf.iteye.com/blog/382749 Java加密技术(一)——BASE64与单向加密算法MD5&SHA&
接下来我们介绍DSA数字签名,非对称加密的另一种实现。 DSA DSA-Digital Signature Algorithm 是Sch
接下来我们介绍DSA数字签名,非对称加密的另一种实现。 DSA DSA-Digital Signature Algorithm 是Sch
非对称加密: 1.鲍勃有两把钥匙,一把是公钥,另一把是私钥 (公钥是公开的任何人都可以下载到) 2.
接下来我们介绍DSA数字签名,非对称加密的另一种实现。 DSA DSA-Digital Signature Algorithm 是Sch
分类: 加密及算法 2012-12-25 19:26 208人阅读 评论(0) 收藏 举报 对 于一般的开发人员来说,很少
<转>http://snowolf.iteye.com/blog/382749 DSA DSA-Digital Signature Algorithm 是Schnorr和
使用该指南前请确认您已经成功申请、安装好客户端数字证书,如果还没有证书请到https://buy.wosign.c
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号