广告
返回顶部
首页 > 资讯 > 精选 >web中常用的加密算法有哪些
  • 302
分享到

web中常用的加密算法有哪些

2023-06-17 08:06:24 302人浏览 八月长安
摘要

今天小编给大家分享一下WEB中常用的加密算法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 加密算法我们整体

今天小编给大家分享一下WEB中常用的加密算法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

 web中常用的加密算法有哪些

加密算法我们整体可以分为:可逆加密和不可逆加密,可逆加密又可以分为:对称加密和非对称加密。

一、不可逆加密

常见的不可逆加密算法有MD5,HMac,SHA1、SHA-224、SHA-256、SHA-384,和SHA-512,其中SHA-224、SHA-256、SHA-384,和SHA-512我们可以统称为SHA2加密算法,SHA加密算法的安全性要比MD5更高,而SHA2加密算法比SHA1的要高。其中SHA后面的数字表示的是加密后的字符串长度,SHA1默认会产生一个160位的信息摘要。

不可逆加密算法最大的特点就是密钥,但是HMAC是需要密钥的【手动狗头】。

由于这些加密都是不可逆的,因此比较常用的场景就是用户密码加密,其验证过程就是通过比较两个加密后的字符串是否一样来确认身份的。网上也有很多自称是可以破解MD5密码的网站,其原理也是一样,就是有一个巨大的资源库,存放了许多字符串及对应的MD5加密后的字符串,通过你输入的MD5加密串来进行比较,如果过你的密码复杂度比较低,还是有很大机率验证出来的。

1.1 MD5

MD5信息摘要算法(英语:MD5 Message-Digest  AlGorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

MD5算法有以下特点:

压缩性:无论数据长度是多少,计算出来的MD5值长度相同

容易计算性:由原数据容易计算出MD5值

抗修改性:即便修改一个字节,计算出来的MD5值也会巨大差异

抗碰撞性:知道数据和MD5值,很小概率找到相同MD5值相同的原数据。

public static String md5(String text) {    MessageDigest messageDigest = null;     try {          messageDigest = MessageDigest.getInstance("MD5");      } catch (NoSuchAlgorithmException e) {          e.printStackTrace();      }      byte[] bytes = messageDigest.digest(text.getBytes());      return Hex.encodeHexString(bytes);  }

1.2 SHA系列

安全散列算法(英语:Secure Hash  Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

2005年8月17日的CRYPTO会议尾声中王小云、姚期智、姚储枫再度发表更有效率的SHA-1攻击法,能在2的63次方个计算复杂度内找到碰撞。

也就是说SHA-1加密算法有碰撞的可能性,虽然很小。

public static String sha256(String text) {     MessageDigest messageDigest = null;     try {         messageDigest = MessageDigest.getInstance("SHA-256");     } catch (NoSuchAlgorithmException e) {         e.printStackTrace();     }     byte[] bytes = messageDigest.digest(text.getBytes());      return Hex.encodeHexString(bytes);  }

1.3 HMAC系列

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication  Code)的缩写,由H.Krawezyk,M.Bellare,R.Canetti于1996年提出的一种基于Hash函数和密钥进行消息认证的方法,并于1997年作为RFC2104被公布,并在IPSec和其他网络协议(如SSL)中得以广泛应用,现在已经成为事实上的Internet安全标准。它可以与任何迭代散列函数捆绑使用。

HMAC算法更像是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的Hash算法

public static String hmacSha256(String text, SecreTKEySpec sk) {     Mac mac = null;     try {         mac = Mac.getInstance("HmacSHA256");     } catch (NoSuchAlgorithmException e) {         e.printStackTrace();     }     try {         mac.init(sk);     } catch (InvalidKeyException e) {         e.printStackTrace();     }     byte[] rawHmac = mac.doFinal(text.getBytes());     return new String(Base64.encodeBase64(rawHmac));

如果要使用不可逆加密,推荐使用SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512这几种算法。

二、对称加密算法

对称加密算法是应用比较早的算法,在数据加密和解密的时用的都是同一个密钥,这就造成了密钥管理困难的问题。常见的对称加密算法有DES、3DES、AES128、AES192、AES256  (默认安装的 jdk 尚不支持 AES256,需要安装对应的 jce 补丁进行升级  jce1.7,jce1.8)。其中AES后面的数字代表的是密钥长度。对称加密算法的安全性相对较低,比较适用的场景就是内网环境中的加解密。

2.1 DES

DES是对称加密算法领域中的典型算法,其密钥默认长度为56位。

/ 加密  public static String encrypt(byte[] dataSource, String passWord){       try {           SecureRandom random = new SecureRandom();           DESKeySpec desKeySpec = new DESKeySpec(password.getBytes());           //创建一个密匙工厂,然后用它把DESKeySpec转换成            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");            SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);            //Cipher对象实际完成加密操作           Cipher cipher = Cipher.getInstance("DES");           //用密匙初始化Cipher对象           cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);           //正式执行加密操作           return Base64.encodeBase64String(cipher.doFinal(dataSource));       } catch (Throwable e) {           e.printStackTrace();       } return null;   }  // 解密 public static String decrypt(String src, String password) throws Exception{      // DES算法要求有一个可信任的随机数源      SecureRandom random = new SecureRandom();      // 创建一个DESKeySpec对象      DESKeySpec desKeySpec = new DESKeySpec(password.getBytes());      // 创建一个密匙工厂      SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");      // 将DESKeySpec对象转换成SecretKey对象      SecretKey secretKey = keyFactory.generateSecret(desKeySpec);      // Cipher对象实际完成解密操作      Cipher cipher = Cipher.getInstance("DES");      // 用密匙初始化Cipher对象      cipher.init(Cipher.DECRYPT_MODE, secretKey, random);      // 真正开始解密操作      return new String(cipher.doFinal(Base64.decodeBase64(src)));  }

2.2 3DES

3DES(即Triple  DES)是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。密钥长度默认为168位,还可以选择128位。

public static String encryptThreeDESECB(String src, String key) {      try{          DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));          SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");          SecretKey securekey = keyFactory.generateSecret(dks);            Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");          cipher.init(Cipher.ENCRYPT_MODE, securekey);          byte[] b = cipher.doFinal(src.getBytes("UTF-8"));          String ss = new String(Base64.encodeBase64(b));         ss = ss.replaceAll("\\+", "-");         ss = ss.replaceAll("/", "_");         return ss;     } catch(Exception ex){         ex.printStackTrace();         return src;     } }  public static String decryptThreeDESECB(String src, String key) {     try{         src = src.replaceAll("-", "+");         src = src.replaceAll("_", "/");         byte[] bytesrc = Base64.decodeBase64(src.getBytes("UTF-8"));         // --解密的key         DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");         SecretKey securekey = keyFactory.generateSecret(dks);          // --Chipher对象解密         Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");         cipher.init(Cipher.DECRYPT_MODE, securekey);         byte[] retByte = cipher.doFinal(bytesrc);          return new String(retByte, "UTF-8");     } catch(Exception ex){         ex.printStackTrace();         return src;     } }

2.3 AES

AES  高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击,默认密钥长度为128位,还可以供选择192位,256位。这里顺便提一句这个位指的是bit。

private static final String defaultCharset = "UTF-8"; private static final String KEY_AES = "AES"; private static final String KEY_MD5 = "MD5"; private static MessageDigest md5Digest; static {     try {         md5Digest = MessageDigest.getInstance(KEY_MD5);     } catch (NoSuchAlgorithmException e) {      } }  public static String encrypt(String data, String key) {     return doAES(data, key, Cipher.ENCRYPT_MODE); }  public static String decrypt(String data, String key) {     return doAES(data, key, Cipher.DECRYPT_MODE); }    private static String doAES(String data, String key, int mode) {     try {         boolean encrypt = mode == Cipher.ENCRYPT_MODE;         byte[] content;         if (encrypt) {             content = data.getBytes(defaultCharset);         } else {             content = Base64.decodeBase64(data.getBytes());         }         SecretKeySpec keySpec = new SecretKeySpec(md5Digest.digest(key.getBytes(defaultCharset))                                                   , KEY_AES);         Cipher cipher = Cipher.getInstance(KEY_AES);// 创建密码器         cipher.init(mode, keySpec);// 初始化         byte[] result = cipher.doFinal(content);         if (encrypt) {             return new String(Base64.encodeBase64(result));         } else {             return new String(result, defaultCharset);         }     } catch (Exception e) {     }     return null; }

推荐使用对称加密算法有:AES128、AES192、AES256。

三、非对称加密算法

非对称加密算法有两个密钥,这两个密钥完全不同但又完全匹配。只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。常见的非对称加密有RSA、SM2等。

3.1 RSA

RSA密钥至少为500位长,一般推荐使用1024位。

//非对称密钥算法   public static final String KEY_ALGORITHM = "RSA";         private static final int KEY_SIZE = 1024;   //公钥 private static final String PUBLIC_KEY = "RSAPublicKey"; //私钥 private static final String PRIVATE_KEY = "RSAPrivateKey";  public static Map<String, Object> initKey() throws Exception {     //实例化密钥生成器     KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);     //初始化密钥生成器     keyPairGenerator.initialize(KEY_SIZE);     //生成密钥对     KeyPair keyPair = keyPairGenerator.generateKeyPair();     //甲方公钥     RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();     //甲方私钥     RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();     //将密钥存储在map中     Map<String, Object> keyMap = new HashMap<String, Object>();     keyMap.put(PUBLIC_KEY, publicKey);     keyMap.put(PRIVATE_KEY, privateKey);     return keyMap; }  public static byte[] encryptByPrivateKey(byte[] data, byte[] key) throws Exception {      //取得私钥     PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key);     KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     //生成私钥     PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);     //数据加密     Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     cipher.init(Cipher.ENCRYPT_MODE, privateKey);     return cipher.doFinal(data); }   public static byte[] encryptByPublicKey(byte[] data, byte[] key) throws Exception {      //实例化密钥工厂     KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     //初始化公钥     //密钥材料转换     X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);     //产生公钥     PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);     //数据加密     Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     cipher.init(Cipher.ENCRYPT_MODE, pubKey);     return cipher.doFinal(data); }   public static byte[] decryptByPrivateKey(byte[] data, byte[] key) throws Exception {     //取得私钥     PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key);     KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     //生成私钥     PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);     //数据解密     Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     cipher.init(Cipher.DECRYPT_MODE, privateKey);     return cipher.doFinal(data); }   public static byte[] decryptByPublicKey(byte[] data, byte[] key) throws Exception {      //实例化密钥工厂     KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     //初始化公钥     //密钥材料转换     X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);     //产生公钥     PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);     //数据解密     Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     cipher.init(Cipher.DECRYPT_MODE, pubKey);     return cipher.doFinal(data); }   public static byte[] getPrivateKey(Map<String, Object> keyMap) {     Key key = (Key) keyMap.get(PRIVATE_KEY);     return key.getEncoded(); }   public static byte[] getPublicKey(Map<String, Object> keyMap) throws Exception {     Key key = (Key) keyMap.get(PUBLIC_KEY);     return key.getEncoded(); }

四、加密盐

加密盐也是比较常听到的一个概念,盐就是一个随机字符串用来和我们的加密串拼接后进行加密。加盐主要是为了提供加密字符串的安全性。假如有一个加盐后的加密串,黑客通过一定手段这个加密串,他拿到的明文,并不是我们加密前的字符串,而是加密前的字符串和盐组合的字符串,这样相对来说又增加了字符串的安全性。

以上就是“web中常用的加密算法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: web中常用的加密算法有哪些

本文链接: https://www.lsjlt.com/news/287866.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • web中常用的加密算法有哪些
    今天小编给大家分享一下web中常用的加密算法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 加密算法我们整体...
    99+
    2023-06-17
  • PHP中常用的加密算法有哪些?
    随着互联网的发展,数据安全已成为我们日常工作中必须关注的严肃问题。针对敏感的个人信息或商业数据,加密变得尤为重要。在PHP开发中,一些加密算法被广泛应用,下面我们就来了解一下PHP中常用的加密算法。一、Base64编码Base64编码常用于...
    99+
    2023-05-14
    PHP 加密算法 常用
  • Golang中常见加密算法有哪些
    本文小编为大家详细介绍“Golang中常见加密算法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang中常见加密算法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.md5 加密&md...
    99+
    2023-07-05
  • Python中常见的加密解密算法有哪些
    1.url encode加密简介:当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至'/'做一下编码转换。# -*- codin...
    99+
    2023-05-16
    Python
  • .NET中常见的加解密算法有哪些
    这篇文章主要讲解了“.NET中常见的加解密算法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET中常见的加解密算法有哪些”吧!一、MD5不可逆加密不可逆加密是指将原文加密成密文以后...
    99+
    2023-06-29
  • Linux下常见的加密算法有哪些
    这篇文章将为大家详细讲解有关Linux下常见的加密算法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux系统中常见的加密算法有:对称加密;非对称加密;单向加密;SSL/TLS;秘钥交换等。1、...
    99+
    2023-06-27
  • Python爬虫中常见的加密算法有哪些
    这篇文章主要讲解了“Python爬虫中常见的加密算法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python爬虫中常见的加密算法有哪些”吧!1. 基础常识首先我们需要明白的是,什么是...
    99+
    2023-07-02
  • 常用的数据加密算法主要有哪些
    常见的数据加密算法有以下几种DES算法DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。MD5算法MD5为计算机安全领域广泛使用...
    99+
    2022-10-18
  • java中的加密算法有哪些
    java中的加密算法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java中的加密算法有哪些import java.security.MessageDigest...
    99+
    2023-05-31
    java 加密算法 ava
  • Python中有哪些加密算法
    这期内容当中小编将会给大家带来有关Python中有哪些加密算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MD5加密全称:MD5消息摘要算法(英语:MD5 Message-Digest  Al...
    99+
    2023-06-16
  • java加密算法有哪些
    java中常用的加密算法有:1.BASE64算法,二进制数据;2.MD5算法,散列函数;3.SHA算法,消息摘要算法;4.RSA算法,用于加密和数字签名的算法;5.DES算法,对称密码体制加密算法;6.PBE算法,基于口令的加密算法;7.D...
    99+
    2022-10-07
  • 有哪些Go加密解密算法
    这篇文章主要讲解了“有哪些Go加密解密算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Go加密解密算法”吧!md5MD5信息摘要算法是一种被广泛使用的密码散列函数,可以产生出一个12...
    99+
    2023-06-16
  • OpenSSL中的加密算法指令有哪些
    OpenSSL中的加密算法指令有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。OpenSSL是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库、应用程序...
    99+
    2023-06-12
  • java可逆加密算法有哪些
    java中的可逆加密算法有:1.DES算法,适用于计算机系统的商用密码;2.RSA算法,使用不同的加密与解密密钥;3.AES算法,基于排列和置换运算实现;4.IDEA算法,数据块加密算法;java中的可逆加密算法有以下几种DES算法DES算...
    99+
    2022-10-22
  • java常见的加密方法有哪些
    Java常见的加密方法有以下几种:1. 对称加密:对称加密算法使用相同的密钥对数据进行加密和解密,常见的对称加密算法有DES、3DE...
    99+
    2023-09-06
    java
  • 网络数据加密算法有哪些
    常见的网络数据加密算法有以下几种AES加密算法AES算法是基于排列和置换运算实现的,排列是对数据重新进行安排,置换是将一个数据单元替换为另一个,AES是一个迭代的、对称密钥分组的密码,是使用相同的密钥进行加密和解密数据的。RSA加密算法RS...
    99+
    2022-10-09
  • 常用的加密方式有哪些
    一、密钥散列 采用MD5或者SHA1等散列算法,对明文进行加密。严格来说,MD5不算一种加密算法,而是一种摘要算法。无论多长的输入,MD5都会输出一个128位(16字节)的散列值。而SHA1也是流行的消息摘要算法,它可以生成一个被称为消息摘...
    99+
    2023-09-25
    网络 java 服务器
  • 总结一些Java常用的加密算法
    目录一、加密算法分类二、加密算法的应用三、对称加密算法实现3.1 DES介绍3.2 IDEA介绍四、不可逆加密算法4.1 MD5介绍4.2 SHA1介绍4.3 HMAC 介绍五、非对...
    99+
    2022-11-12
  • PHP常用的加密解密方式有哪些
    PHP常用的加密解密方式有以下几种:1. md5:通过对数据进行不可逆的哈希运算,生成固定长度的摘要。2. sha1:与md5类似,...
    99+
    2023-08-30
    PHP
  • rsa对称加密算法有哪些优点
    RSA非对称加密算法有以下优点:1. 安全性高:RSA算法基于一个数论难题,即大整数分解,目前尚未发现有效的算法来解决这个难题。因此...
    99+
    2023-10-20
    rsa
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作