`
david_je
  • 浏览: 373903 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

加密解密的一些知识

    博客分类:
  • java
 
阅读更多

     一直对加密和解密有着某种神秘感,这个周末决定好好学习一下。加密是以某种算法来改变原来的信息,使未得到授权的用户即使获得已加密的信息,也无法了解原来的信息内容。可分为单向加密和双向加密,其中双向加密有两种,对称加密和非对称加密。

 

     单向加密是对信息进行摘要计算,不能通过算法生成明文。双向加密是加密成密文后,得到秘钥可以还原成明文。有一些观点认为单向加密不属于加密算法,它只能对信息计算摘要,我们不去讨论这个问题。

 

     一般来说单向加密算法有MD5,SHA,HMAC几种,BASE64是编码算法,不是加密算法,有的地方有可能认为这是一种加密算法,特此说明一下。MD5,SHA和HMAC是非可逆算法,就是说无法解密的加密算法,但是这几种算法加密并不可靠,有很多网站提供了密码破解服务,比如,破解MD5加密信息的网站有很多很多,如http://www.cmd5.com/. 

 

MD5(Message DIGEST ALGORITHM 5),叫做信息摘要算法,可用于文件校验:

   java代码如下:

   

public static void main(String[] args) throws Exception {
		String name = "davidyang013@gmail.com";
		byte[] data = name.getBytes();
		System.out.println(byte2hex(getMD5(data)));
}

public static byte[] getMD5(byte[] data) throws Exception {
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		md5.update(data);
		return md5.digest();
}

//binary to hexdecimal 
public static String byte2hex(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1) {
				hs = hs + "0" + stmp;
			} else {
				hs = hs + stmp;
			}
		}
		return hs.toUpperCase();
}
 

 

 

   输出是:

    

0BFA45D98A1F0856A4261B32901A0B67
 

 

 

    python代码可能会简单一点:

    

import md5

hash = md5.new()
hash.update("davidyang013@gmail.com")
hash.hexdigest()
 

 

    

    他们的输出是一样的,java的代码是大写的,python是小写的,可以去调整一下。

    MD5算法原理,可参考http://blog.csdn.net/forgotaboutgirl/article/details/7258109

 

    

    SHA(Secure Hash Algorithm),叫做安全散列算法,可作为数字签名,广泛应用于电子商务等信息安全领域,虽然和MD5一样都被破解了,但比MD5要安全一点。

java代码:

   

     

public static void main(String[] args) throws Exception {
		String name = "davidyang013@gmail.com";
		byte[] data = name.getBytes();
		System.out.println("SHA-1:" + byte2hex(getSHA(data)));
}

public static byte[] getSHA(byte[] data) throws Exception {
		MessageDigest sha = MessageDigest.getInstance("SHA-1");
		sha.update(data);
		return sha.digest();
}
 

 

 

   输出结果是:

   

SHA-1:A6DDBADE1F91D2A30CE48244528DFED5BD9FB039
 

 

    Python代码:

    

import sha

hash = sha.new()
hash.update("davidyang013@gamil.com")
hash.hexdigest()
 

 

 

   HMAC(Hash Message Authentication Code),叫做散列消息鉴别吗,基于秘钥的Hash算法的认证协议。实现原理是,用公开函数和秘钥产生一个固定长度的值(即MAC)作为认证标识,用它来鉴别消息的完整性。MAC算法可选一下几种,HmacMD5,hmacSHA1,hmacSHA256,hmacSHA512.

java代码如下:

  

    

public static void main(String[] args) throws Exception {
		String name = "davidyang013@gmail.com";
		byte[] data = name.getBytes();
		
		String hmacKey = initMacKey();
		System.out.println("encrypted key :" + hmacKey);
		System.out.println("HMAC:" + byte2hex(getHMAC(data,hmacKey)));
	}

//initialize
public static String initMacKey() throws Exception {  
	    KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");  
	  
	    SecretKey secretKey = keyGenerator.generateKey();  
	    return encryptBASE64(secretKey.getEncoded());  
	}  

//get encrypted content
public static byte[] getHMAC(byte[] data, String key) throws Exception {  
	  
	    SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), "HmacMD5");  
	    Mac mac = Mac.getInstance(secretKey.getAlgorithm());  
	    mac.init(secretKey);  
	  
	    return mac.doFinal(data);  
	  
	}  

public static String encryptBASE64(byte[] key) throws Exception {  
        return (new BASE64Encoder()).encodeBuffer(key);  
    } 

 

 

  HMAC不同于MD5和SHA的地方在于,它有一个秘钥,增强了数据传输过程中的安全性。

 

   未完待续。。。

 

分享到:
评论

相关推荐

    Java实现的RSA加密解密算法示例

    知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1978年发明。RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和...

    RSA加密解密工具,用于文件的加密和解密* RSA加密解密:私钥解密,公钥加密

    以下是该工具可能包含的一些关键知识点: 1. **RSA原理**:了解RSA的基础原理是使用该工具的前提。RSA基于大数因子分解的困难性,通过两个大素数的乘积生成公钥和私钥,加密和解密过程涉及到指数运算和模逆运算。 ...

    C语言实现DES加密解密算法

    下面是 DES 加密解密算法的 C 语言实现的知识点总结。 字节与二进制转换 在 DES 算法中,需要将字节转换成二进制形式,以便进行加密和解密操作。函数 `ByteToBit` 和 `BitToByte` 实现了字节与二进制之间的转换。`...

    Qt实现AES加密解密

    这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战例程可以帮助开发者更好地掌握Qt环境下的加密解密操作,提高数据安全保护能力。

    对密码进行加密解密

    "对密码进行加密解密" 在本篇文章中,我们将讨论如何实现对登录密码的加密解密,以确保项目安全。为了实现这一点,我们将使用 Java 语言和 DES 加密算法来实现密码的加密和解密。 首先,我们需要了解什么是 DES ...

    加密解密_C语言_加密解密_

    C语言实现加密解密主要涉及以下几个知识点: 1. **基础算法**:常见的加密算法有 Caesar Cipher(凯撒密码)、Vigenère Cipher(维吉尼亚密码)、Playfair Cipher(Playfair密码)等。这些算法相对简单,适合初学...

    脚本加密解密器脚本加密解密器

    在IT行业中,脚本加密与解密是一项...总的来说,脚本加密解密是软件安全领域的一个重要组成部分,对于保护知识产权、防止代码被篡改或盗用具有重要意义。而选择合适的加密解密器,并正确使用,是实现这一目标的关键。

    des加密解密_Des加密解密_DES加密_

    1. **DLL函数调用**:程序通过`LoadLibrary`函数加载动态链接库,然后使用`GetProcAddress`获取加密解密函数的地址,最后调用这些函数进行数据处理。 2. **参数传递**:加密和解密函数可能需要接收明文数据、密钥和...

    MFC 加密解密字符串

    总之,MFC中的字符串加密和解密涉及到多种技术,包括但不限于对称加密(如AES)、非对称加密(如RSA)、哈希函数等。开发者应根据具体需求选择合适的加密算法,并合理管理密钥,确保数据的安全性。通过熟练掌握这些...

    python实现AES加密解密

    (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原先的输入,运行的结果如下 开始的字符串就是输入的明文,第一个矩阵,是明文对应的状态矩阵,下面的字典是...

    MFC 实现文本文件加密解密

    通过理解和掌握这些知识点,开发者不仅能创建出具有文件加密解密功能的应用,还能进一步提升其在数据安全领域的专业技能。对于学习者来说,这是一个很好的实践项目,有助于深入理解MFC框架以及加密解密原理。

    vb.net加密解密源代码

    这个名为"vb.net加密解密源代码"的项目,是利用Visual Studio 2008开发的一个小型应用程序,提供了对数据进行加解密的功能。下面我们将详细探讨相关的知识点。 1. **VB.NET基础**: VB.NET是微软公司开发的一种...

    加密解密工具箱

    在使用"加密解密工具箱"时,用户需要注意的是,虽然这些工具的界面通常设计得直观易用,但用户仍需了解加密的基础知识。例如,用户需要知道何时使用对称加密或非对称加密,以及如何安全地生成和管理密钥。错误的加密...

    加密解密字符串的例子

    接下来,我们将深入探讨加密解密的基础知识以及可能涉及的技术。 1. 加密解密原理: 加密是将明文(可读数据)转化为密文(不可读数据)的过程,而解密则是将密文恢复为明文。这通常通过一种算法(称为加密算法)...

    c++字符串加密解密

    以下是关于C++实现DES加密解密的相关知识点: 1. **DES算法介绍**: DES是一种块加密算法,它将64位的数据块(其中第8位用于奇偶校验,实际有效数据为56位)作为输入,经过16轮的迭代变换,最终得到64位的密文。...

    javascript将url中的参数加密解密代码

    在JavaScript中,有时我们需要对URL中的参数进行加密和解密,以确保数据的安全性,防止敏感信息被轻易读取。本文提供的代码片段就是用于实现这个目的的一个示例。让我们深入了解一下这段代码的工作原理和相关知识点...

    VB字符串加密解密

    下面将详细介绍VB字符串加密解密的相关知识点。 一、基础概念 1. 加密:加密是将明文数据转换为看似随机的密文,使得非授权者无法理解其原始内容。加密过程通常使用一个密钥,只有拥有正确密钥的人才能解密并恢复...

    超级加密解密 V1.3 - .Net源码 - C#

    本文将深入探讨该项目所涉及的几个核心知识点,包括加密解密的基本原理、.NET框架的应用以及C#编程语言在实现这些功能中的关键角色。 一、加密解密基础 1. 对称加密:这种加密方法使用同一密钥进行加密和解密,如...

    c#文件加密解密工具(含源码及工程文件)

    自己用c#写的加密解密软件,采用自带组件System.Security.Cryptography,有详细注释,可直接运行看结果,写给不懂加密解密知识的人使用的,不用有加密解密等编程基础,只需添加窗体进自己的程序,然后按照代码注释在...

    java和javascript之间的DES加密解密

    Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...

Global site tag (gtag.js) - Google Analytics