网站首页 > 技术文章 正文
我不是高手,我只是一个普通的程序员,我特别愿意大家留言讨论,批评指正,您给我指正了,我就去查资料,去做实验,我技术就能得到提高,我认为这是一个程序员的基本素养。
序言:程序员在实际的开发中会或多或少地用到一些加密的算法,如base64、md5、dex、aex、rsa等等。但是算法的种类很多,初学者经常会一头雾水,虽然也使用了,但是总感觉懵懵懂懂,今天我就对常用的一些算法做一个梳理和总结,我也不是高手,只是凭着自己的理解对自己以前用到过的做一个浅浅的整理,可能不知道的或者没介绍到的算法还有很多,希望大家留言指正。
一,算法的分类
1,hash算法(摘要算法):MD5,SHA1,SHA2(SHA256,SHA384,SHA512),此类算法只是摘要,是不可逆的,你拿到一个摘要值是没法还原出来原始数据的。
2,对称加密算法:DES,3DES,AES。
3,非对称加密算法:RSA
二,算法的使用
1,摘要算法的使用,首先摘要算法并不是加密算法,只是验证数据一致性的算法,摘要算法又称哈希算法、散列算法。比较常用的就是MD5,SHA256。摘要算法的最常使用场景就是比较信息的一致性,为什么不直接比较呢,因为有时候信息的数据量会很大,而MD5以后是可以提取一个32长度的摘要,只比较这个32位的字符串一致性就可以了。只要信息数据是一样的两个数据MD5以后的这个32位长度的摘要值就是一样的,哪怕你变化了一个字节,这个MD5以后的摘要值就不一样了。
下面我们做一个实验,linux下有个命令叫md5sum,windows下有个命令叫CertUtil。
随便找到一个文件,或者自己新建一个文件,linux下执行
md5sum aaa.txt
windows下执行
CertUtil -hashfile aaa.txt MD5
然后对文件内容做一下修改,再执行命令,发现这个摘要值已经发生了变化,再把内容改回去,发现又变回和刚才一样了。一般某些软件的官方下载网站都会提供一个该软件的MD5以后的hash值。如果下载了软件以后,或者是从其他渠道得到的软件。你都可以通过上面的命令来计算一下你手里的软件的hash值和官方提供的hash值是否一致,如果不一致你手里的文件就可能是被篡改过的,加了广告插件啊,或者下载不完整啊,或者版本不一致啊等等。
MD5还有一个常用的场景就是各种信息系统的密码存储,把用户设置的密码(正确的称呼其实是口令)以md5加密后的值存到数据库里,这样即使是系统被暴库了,看到的用户密码也都是MD5以后的,不是明文,也就没法知道用户设置的密码了。系统在用户登录的时候,也是把用户输入的密码进行MD5以后再跟数据库里存储的MD5后的密码进行比较就行了,为了安全,一般还会加上salt(盐值)。
下面演示一下常用的编程语言是如何进行MD5加密的。
java类
public static void main(String[] args) {
String dataStr = "hello";
try {
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(dataStr.getBytes("UTF8"));
byte s[] = m.digest();
String result = "";
for (int i = 0; i < s.length; i++) {
String hexStr=Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00);
result += Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00).substring(6);
}
System.out.println(result);
} catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
如果是Spring boot项目就简单了,spring封装了工具类
String result = DigestUtils.md5DigestAsHex(base.getBytes());
System.out.println(result);
python
import hashlib
m = hashlib.md5()
m.update(b'hello')
result = m.hexdigest()
c#
using System.Security.Cryptography;
using System;
using System.Text;
namespace test.md5
{
public static void Main(string[] args)
{
string str = "hello";
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytValue, bytHash;
bytValue = System.Text.Encoding.UTF8.GetBytes(str);
bytHash = md5.ComputeHash(bytValue);
Console.WriteLine(bytHash.Length);
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < bytHash.Length; i++)
{
sBuilder.Append(bytHash[i].ToString("x2"));
Console.WriteLine(bytHash[i]);
}
md5.Clear();
Console.WriteLine(sBuilder);
}
}
猜你喜欢
- 2024-09-27 MD5 到底算不算一种加密算法? md5是数据加密算法吗
- 2024-09-27 在网站开发时你还是只用md5加密密码吗?
- 2024-09-27 通过一次安全处理暴露的问题 通过一次安全处理暴露的问题的英文
- 2024-09-27 加解密与HTTPS(3) 加解密服务器通讯异常
- 2024-09-27 Qt怎么使用MD5加密 md5在线加密解密工具
- 2024-09-27 Java加密体系(MD5算法) javamd5密钥加密解密
- 2024-09-27 Swift版StringExtention方法MD5加密
- 2024-09-27 浅谈MD5加密算法,头条官方工程师就是依此内容查重(小白勿进)
- 2024-09-27 用MD5加密为何不再安全了 md5加密后的值是唯一的吗
- 2024-09-27 openssl md5算法——Linux下(字符串加密、文件加密)
你 发表评论:
欢迎- 05-10如何优化数据库和前端之间的交互?
- 05-10前端代码优化小秘籍(前端优化24条建议)
- 05-10VS Code当中的15个神仙插件,值得收藏
- 05-10如何自己开发一个Google浏览器插件?
- 05-10前端流行框架Vue3教程:14. 组件传递Props效验
- 05-10吃了一年的SU,最好用的插件都在这了
- 05-10前端必看!这款神器让网站界面告别千篇一律
- 05-10程序员请收好:10个非常有用的 Visual Studio Code 插件
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)