数据加密保障数据安全

2024-01-21

一、目标

1.1 预研需求

数据加密是安全领域中常用的安全措施,它们的主要作用是保护数据的机密性和完整性,以防止未经授权的访问、窃取、篡改或泄漏敏感信息。

数据传输加密

  • 保护敏感数据在传输过程中的安全,当数据通过网络传输时,它们可能会经过多个中间节点,例如路由器、服务器和网络链路,这些节点都有潜在的风险,可能会被黑客或恶意攻击者监视或拦截。

数据存储加密

  • 存储上的备份数据是明文存放的,虽然是通过存储内部的格式存放的,但是通过访问存储介质就能直接读取部分原始内容,不够安全。数据存储加密用于在数据存储介质(例如硬盘、云存储、数据库)上保护数据的安全。即使黑客物理访问了存储设备,也无法轻易获取其中的数据。

1.2 问题描述

  1. 用户登录、修改密码时,在网络传输过程中没有进行加密处理
  2. 除了密码是否有其他字段需要加密处理?

二、理论依据

2.1 现有技术分析

数据加密算法:

2.1.1 可逆加密算法

可逆加密算法又分为对称加密算法、非对称加密算法。

2.1.1.1 对称加密算法

对称加密算法是加密和解密使用相同密钥的加密算法。

主要的一些加密算法:

  • DES:已破解,很少使用了
  • 3DES:早期DES的替代。计算密钥时间太长、加密效率不高,所以也基本上不用
  • AES:后期DES的提代。密钥建立时间短、灵敏性好、内存需求低。最常用。
  • IDEA:常用的电子邮件加密算法
2.1.1.2 非对称加密算法

非对称加密算法需要两个密钥(公钥和私钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。

主要的一些加密算法:

  • DSA:只能用于数字签名,而无法用于加密(某些扩展可以支持加密)
  • RSA:即可作为数字签名,也可以作为加密算法。不过作为加密使用的 RSA 有着随密钥长度增加,性能急剧下降的问题。且对内容长度有限制,明文长度=秘钥bit长度值/8-11。1024位的密钥最多只能加密117位(1024/8-11=117)数据,否则就会报错。

2.2.1 不可逆加密算法

相比可逆算法,不可逆算法不支持解密,一旦加密后的结果生成,就无法恢复原始数据。

2.2.1.1 散列算法

又称哈希函数,指纹。把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值(摘要)。

作用:下载一个文件,文件的下载过程中会经过很多网络服务器、路由器的中转,如何保证这个文件下载过程中没有丢包,被完整的下载下来了呢?我们不可能去检测这个文件的每个字节,也不能简单地利用文件名、文件大小这些极容易伪装的信息去判断。这时候,我们就需要一种唯一标志来检查文件的可靠性。

主要的一些加密算法:

  • MD5:可产生2进制128位(16进制32位)哈希值。
  • SHA:包括SSHA-1、SHA-256、SHA-384、SHA-512等。SHA-1可以产生160位的哈希值,SHA256、SHA384、SHA512可产生256、384、512位的哈希值。
  • HMAC:基于哈希函数和密钥的一种消息认证算法。利用哈希运算,以一个密钥和一个消息为输入,生成消息摘要作为输出。需要注意的是,HMAC是信息鉴别码,所以它并不加密信息,而是把经过Hash处理过的信息作为认证码,并且信息必须要和HMAC得到的Hash值一起传输,进行鉴别时,拥有密钥的人对信息再次进行Hash,如果信息没有发生任何改变,得到的Hash值与接收到的Hash值将会是一致的。(类似于加签、验签的一个过程)
2.2.1.2 密码推导函数算法

最常见的就是利用hash算法进行加密,利用hash算法的不可逆性,保护数据信息不被泄露。但是经过hash处理后的密码依然未必安全,常见的有字典破解以及暴力破解,但是由于上述方法算法复杂度过大,当下大多选择更高效的查表法进行处理——包括逆向查表以及彩虹表法。

基于上述问题,我们又产生了新的解决方案。salt是一个随机生成的长字符串,将salt与原始密码连接,对连接后的字符串加密,由于salt的随机性,解决了查表法带来的问题。

主要的一些加密算法:

  • PBKDF2:将salted hash进行多次重复计算,其中次数是可定义的。对此算法的时间复杂度进行量化,如果计算一次所需要的时间是1微秒,那么计算1百万次就需要1秒钟。
  • Bcrypt:基于Blowfish加密算法改进得到,算法会随机加盐,每次加密后的密文都是不一样的

2.2 现有产品分析

三、技术预研

我们主要研究MD5、RSA两种加密算法

3.1 MD5加密逻辑

前端 MD5加密

// 安装js-md5

// npm i js-md5



import md5 from 'js-md5';

Vue.prototype.$md5Util = md5;



this.$md5Util("请将我这段文字加密")

// 加密结果:aa888a86dca6e9d5ae216c23070e8c47

Java MD5加密

import org.springframework.util.DigestUtils;



public class test{

    public static void main(String[] a) {

        System.out.println(DigestUtils.md5DigestAsHex("请将我这段文字加密".getBytes()));

        // 加密结果:aa888a86dca6e9d5ae216c23070e8c47

    }

}

由于MD5是不可逆加密算法,前端经过加密以后,后端没办法解密,也就无法获取到原始数据。

因此,使用MD5加密的数据,后端不需要再次加密,只需要将加密后的数据保留至数据库。后续前端传值,全部为加密数据,后端直接对比和数据库中的值即可。

3.2 RSA加密逻辑

前端 RSA加密、解密

// 安装jsencrypt

// npm i jsencrypt -S



import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'



//公钥

const publicKey = ''

//私钥

const privateKey = ''

  

// 加密

export function encrypt(txt) {

  const encryptor = new JSEncrypt()

  encryptor.setPublicKey(publicKey) // 设置公钥

  return encryptor.encrypt(txt) // 对数据

}

  

// 解密(暂无使用)

export function decrypt(txt) {

  const encryptor = new JSEncrypt()

  encryptor.setPrivateKey(privateKey) // 设置私钥

  return encryptor.decrypt(txt) // 对数据进行解密

}

Java RSA加密、解密

import org.apache.tomcat.util.codec.binary.Base64;

import javax.crypto.Cipher;

import java.security.KeyFactory;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;



/**

 * @ClassName RSAUtil

 * @Description 使用Cipher类实现RSA加密解密

 **/

public class RSAUtil {



    private static final String privateKey="";

    private static final String publicKey="";



    /**

     * RSA公钥加密

     * @param str 加密字符串

     * @return 密文

     */

    public static String encrypt( String str) throws Exception{

        //base64编码的公钥

        byte[] decoded = Base64.decodeBase64(publicKey);

        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));

        //RSA加密

        Cipher cipher = Cipher.getInstance("RSA");

        cipher.init(Cipher.ENCRYPT_MODE, pubKey);

        String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));

        return outStr;

    }



    /**

     * RSA私钥解密

     * @param str 加密字符串

     * @return 铭文

     * @throws Exception 解密过程中的异常信息

     */

    public static String decrypt(String str) throws Exception{

        //64位解码加密后的字符串

        byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));

        //base64编码的私钥

        byte[] decoded = Base64.decodeBase64(privateKey);

        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));

        //RSA解密

        Cipher cipher = Cipher.getInstance("RSA");

        cipher.init(Cipher.DECRYPT_MODE, priKey);

        String outStr = new String(cipher.doFinal(inputByte));

        return outStr;

    }



}

四、结论


进过上面的分析,

在数据传输中:

MD5 较为简单,只需要前端进行数据加密即可。但是安全性较低,一些简单的密码可以通过逆向查表暴力破解。

RSA 需要维护一套公私钥。但是安全性较高。

数据存储加密:

由于存储数据一般都需要使用,需要原始数据,所以基本上不采用不可逆加密算法。可以采用:

AES 对称加密算法,性能好。虽然加密解密使用同一个秘钥,但加密解密过程在同一个系统中,无需担心秘钥丢失问题。

RSA 非对称加密算法, 公钥加密,私钥解密。(加密解密在一个系统中,感觉没有必要采用这种方式)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据加密保障数据安全 的相关文章

  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是
  • 视频合并在线工具有什么好用的?这几款你知道吗?

    你有没有自己剪辑过视频 现在这个时代 大家或多或少都会一点剪辑的操作 不过有时候我们会需要将多个视频片段合并成一个完整的视频 那么 如何快速 有效地完成这一任务呢 这就需要借助一些视频编辑工具 今天就跟大家分享视频合并app和电脑软件 让大
  • 驾驭远程工作:提高工作效率与灵活性的秘诀

    随着科技的飞速发展 远程工作已成为越来越多企业和员工的选择 这种工作模式不仅为员工提供了更大的灵活性 也为提高工作效率创造了新的可能 本文将深入探讨如何通过远程工作提高工作效率和灵活性 一 明确目标与计划 在远程工作中 明确的目标和计划至关
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 一台java服务器可以跑多少个线程?

    一台java服务器可以跑多少个线程 一台java服务器能跑多少个线程 这个问题来自一次线上报警如下图 超过了我们的配置阈值 打出jstack文件 通过IBM Thread and Monitor Dump Analyzer for Java
  • 查找薪水记录超15条的员工号emp_no以及其对应的记录次数

    理想 大模型面经 23届试用期没通过 还能找到工作吗 有没有啥厂招往届生啊 腾讯音乐前端暑期实习一面 已oc 华为od 机试 面试面经 华为OD技术岗面经汇总 软开 算法 测试岗 想看一下大家看法 一个月过去了 25终于找到JAVA实习 华
  • 怎么把视频压缩变小?节约空间的工具推荐

    nbsp 我平时逛街的时候 看见有趣的事情就忍不住会用视频的方式记录下来 有时候还会拍给朋友看 但是 这些视频占据大量的存储空间 给我的手机带来不小的压力 所以有时候 为了方便分享或传输 我就会将视频文件压缩 以便更轻松地将其发送给朋友或发

随机推荐

  • 海报模板怎么进行编辑文字?公司宣传海报就这样做

    作为负责公司宣传事宜的部门 我每天不是在做海报 就是在找做海报的素材 力求要把这些宣传的物料都做得精致又有内容 经过我长时间的试用下来 给大家从基本功能 使用体验和不同场景下的应用这几个方面 总结出了海报制作软件哪个好用 接下来就让我为你详
  • Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • 【计算机选题推荐】校园兼职小程序的设计与实现

    精彩专栏推荐订阅 在下方主页 作者主页 计算机毕设木哥 文章目录 一 项目介绍 二 开发环境 三 系统展示 四 代码展示 五 项目总结 font color fe2c24 大家可以帮忙点赞 收藏 关注 评论啦 一 项目介绍 随着高等教育的普
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

    WebSocket 浏览器通过JavaScript向服务器发出建立WebSocket链接的请求 链接建立后 客户端和服务器端就可以通过TCP链接直接交互数据 WebSocket链接后可以通过 send 方法来向服务器发送数据 并通过 onn
  • 不要再苦苦寻觅了!AI 大模型面试指南(含答案)的最全总结来了!

    AI 大模型技术经过2023年的狂飙 2024年必将迎来应用的落地 对 IT 同学来讲 这里蕴含着大量的技术机会 越来越多的企业开始招聘 AI 大模型岗位 本文梳理了 AI 大模型开发技术的面试之道 从 AI 大模型基础面 AI 大模型进阶
  • CAP与BASE理论

    CAP与BASE理论 CAP 一个分布式系统最多只能同时满足一致性 Consistency 可用性 Availability 和分区容错性 Partition tolerance 这三项中的两项 C一致性 状态的一致性 缓存 数据库 集群等
  • 图片翻译在线怎么用?分享翻译软件给你

    作为一个不擅长学习语言的人 我真是要被生活中似乎无处不在的英语搞蒙了 想象一下 你正在逛商场 想买一瓶洗护用品 拿起来却看到商品上满是看不懂英文说明 是不是一头雾水 或者 你在浏览社交媒体时 看到一张充满英文的趣味图片 却因为语言障碍而错过
  • 挖掘知识的宝藏:如何利用在线资源提升个人技能

    在这个信息爆炸的时代 互联网已经成为我们获取知识 提升技能的重要途径 无论是学习编程 提高语言能力 还是了解新的行业趋势 网络资源都为我们提供了无限可能 本文将探讨如何有效利用在线资源进行自我提升 一 选择合适的在线学习平台 首先 我们需要
  • 电脑操作系统的发展史:从初级到高级的演变

    自电脑诞生以来 操作系统作为其重要组成部分 不断推动着电脑技术的进步与发展 本文将带您回顾电脑操作系统的发展历程 探究其在不同阶段的特点与影响 一 早期操作系统 真空管与批处理 在电脑诞生初期 真空管技术占主导地位 此时的操作系统尚未形成完
  • 人工智能 AI 如何让我们的生活更加便利

    每个人都可以从新技术中获益 一想到工作或生活更为便利 简捷且拥有更多空余时间 谁会不为之高兴呢 借助人工智能 每天能够多一些空余时间 或丰富自己的业余生活 为培养日常兴趣爱好增添一点便利 从电子阅读器到智能家居 再到植物识别应用和智能室内花
  • 鸿蒙开发Flex、栅格布局详解

    Flex弹性布局 一 direction 1 FlexDirection Row 主轴为水平方向 子组件从起始端沿着水平方向开始排布 2 FlexDirection RowReverse 主轴为水平方向 子组件从终点端沿着FlexDirec
  • 独家 | 鸿蒙(HarmonyOS)开发详细学习笔记免费分享

    前言 华为宣布 将在1月18日 在北京 上海 杭州 南京 成都 厦门 武汉 长沙 8 大城市同时召开大会 届时将揭秘鸿蒙生态和 HarmonyOS NEXT 进阶新篇章 简单的来说就是 纯血鸿蒙系统 即将彻底揭晓 鸿蒙系统自推出来以来 就一
  • SpringBoot中整合ElasticSearch快速入门以及踩坑记录

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目 若依前后端分离版手把手教你本地搭建环境并运行项目 本地运行若依前后端分离 CSDN博客 参考上面搭建项目 ElaticSearch Elasticsearch 是java开发的 基于
  • 会议设备:提升会议体验与效率的关键

    在当今高度信息化的社会 会议已成为企业 机构和团队之间交流与合作的重要方式 而会议设备的选择与使用 对于提升会议的体验与效率具有举足轻重的地位 本文将详细探讨会议设备的重要性 以及如何选择和使用合适的会议设备 以实现高效 顺畅的沟通 首先
  • Android Studio Android Flutter问题记录 - UNABLE TO FIND BUNDLED JAVA VERSION

    前言 有个紧急问题需要修复 本以为很快就能解决继续休假 没想到项目打开运行后Android端跑不起来了 iOS端正常运行 这就有点莫名其妙 明明放假前还是没问题的 难道我拉取的最新代码有问题 不会吧 谁放假还敲代码啊 樂 看了下最新的提交记
  • 30天精通Nodejs--第二十二天:express-认证和授权

    目录 引言 理解JWT及其工作原理 安装与引入JWT库 生成JWT令牌 验证JWT令牌 注意事项与最佳实践 结语 引言 在现代Web应用开发中 JSON Web Tokens JWT 作为一种轻量级 自包含且安全的标准 已被广泛用于实现用户
  • Kubernetes (十一) 存储——Secret配置管理

    一 简介 从文件创建 echo n admin gt username txt echo n westos gt password txt kubectl create secret generic db user pass from fi
  • AI在保护环境、应对气候变化中的作用

    对于AI生命周期数据领域的全球领导者而言 暂时搁置我们惯常的AI见解和AI生命周期数据内容产出 来认识诸如世界地球日这样的自然环境类活动日 似乎是个奇怪的事情 我们想要知道 数据是否真的会影响我们的地球环境 简而言之 是 确实如此 但作为一
  • 数据加密保障数据安全

    一 目标 1 1 预研需求 数据加密是安全领域中常用的安全措施 它们的主要作用是保护数据的机密性和完整性 以防止未经授权的访问 窃取 篡改或泄漏敏感信息 数据传输加密 保护敏感数据在传输过程中的安全 当数据通过网络传输时 它们可能会经过多个