一直对加密和解密有着某种神秘感,这个周末决定好好学习一下。加密是以某种算法来改变原来的信息,使未得到授权的用户即使获得已加密的信息,也无法了解原来的信息内容。可分为单向加密和双向加密,其中双向加密有两种,对称加密和非对称加密。
单向加密是对信息进行摘要计算,不能通过算法生成明文。双向加密是加密成密文后,得到秘钥可以还原成明文。有一些观点认为单向加密不属于加密算法,它只能对信息计算摘要,我们不去讨论这个问题。
一般来说单向加密算法有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的地方在于,它有一个秘钥,增强了数据传输过程中的安全性。
未完待续。。。
相关推荐
知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1978年发明。RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和...
以下是该工具可能包含的一些关键知识点: 1. **RSA原理**:了解RSA的基础原理是使用该工具的前提。RSA基于大数因子分解的困难性,通过两个大素数的乘积生成公钥和私钥,加密和解密过程涉及到指数运算和模逆运算。 ...
下面是 DES 加密解密算法的 C 语言实现的知识点总结。 字节与二进制转换 在 DES 算法中,需要将字节转换成二进制形式,以便进行加密和解密操作。函数 `ByteToBit` 和 `BitToByte` 实现了字节与二进制之间的转换。`...
这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战例程可以帮助开发者更好地掌握Qt环境下的加密解密操作,提高数据安全保护能力。
"对密码进行加密解密" 在本篇文章中,我们将讨论如何实现对登录密码的加密解密,以确保项目安全。为了实现这一点,我们将使用 Java 语言和 DES 加密算法来实现密码的加密和解密。 首先,我们需要了解什么是 DES ...
C语言实现加密解密主要涉及以下几个知识点: 1. **基础算法**:常见的加密算法有 Caesar Cipher(凯撒密码)、Vigenère Cipher(维吉尼亚密码)、Playfair Cipher(Playfair密码)等。这些算法相对简单,适合初学...
在IT行业中,脚本加密与解密是一项...总的来说,脚本加密解密是软件安全领域的一个重要组成部分,对于保护知识产权、防止代码被篡改或盗用具有重要意义。而选择合适的加密解密器,并正确使用,是实现这一目标的关键。
1. **DLL函数调用**:程序通过`LoadLibrary`函数加载动态链接库,然后使用`GetProcAddress`获取加密解密函数的地址,最后调用这些函数进行数据处理。 2. **参数传递**:加密和解密函数可能需要接收明文数据、密钥和...
总之,MFC中的字符串加密和解密涉及到多种技术,包括但不限于对称加密(如AES)、非对称加密(如RSA)、哈希函数等。开发者应根据具体需求选择合适的加密算法,并合理管理密钥,确保数据的安全性。通过熟练掌握这些...
(1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原先的输入,运行的结果如下 开始的字符串就是输入的明文,第一个矩阵,是明文对应的状态矩阵,下面的字典是...
通过理解和掌握这些知识点,开发者不仅能创建出具有文件加密解密功能的应用,还能进一步提升其在数据安全领域的专业技能。对于学习者来说,这是一个很好的实践项目,有助于深入理解MFC框架以及加密解密原理。
这个名为"vb.net加密解密源代码"的项目,是利用Visual Studio 2008开发的一个小型应用程序,提供了对数据进行加解密的功能。下面我们将详细探讨相关的知识点。 1. **VB.NET基础**: VB.NET是微软公司开发的一种...
在使用"加密解密工具箱"时,用户需要注意的是,虽然这些工具的界面通常设计得直观易用,但用户仍需了解加密的基础知识。例如,用户需要知道何时使用对称加密或非对称加密,以及如何安全地生成和管理密钥。错误的加密...
接下来,我们将深入探讨加密解密的基础知识以及可能涉及的技术。 1. 加密解密原理: 加密是将明文(可读数据)转化为密文(不可读数据)的过程,而解密则是将密文恢复为明文。这通常通过一种算法(称为加密算法)...
以下是关于C++实现DES加密解密的相关知识点: 1. **DES算法介绍**: DES是一种块加密算法,它将64位的数据块(其中第8位用于奇偶校验,实际有效数据为56位)作为输入,经过16轮的迭代变换,最终得到64位的密文。...
在JavaScript中,有时我们需要对URL中的参数进行加密和解密,以确保数据的安全性,防止敏感信息被轻易读取。本文提供的代码片段就是用于实现这个目的的一个示例。让我们深入了解一下这段代码的工作原理和相关知识点...
下面将详细介绍VB字符串加密解密的相关知识点。 一、基础概念 1. 加密:加密是将明文数据转换为看似随机的密文,使得非授权者无法理解其原始内容。加密过程通常使用一个密钥,只有拥有正确密钥的人才能解密并恢复...
本文将深入探讨该项目所涉及的几个核心知识点,包括加密解密的基本原理、.NET框架的应用以及C#编程语言在实现这些功能中的关键角色。 一、加密解密基础 1. 对称加密:这种加密方法使用同一密钥进行加密和解密,如...
自己用c#写的加密解密软件,采用自带组件System.Security.Cryptography,有详细注释,可直接运行看结果,写给不懂加密解密知识的人使用的,不用有加密解密等编程基础,只需添加窗体进自己的程序,然后按照代码注释在...
Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...