前端开发中的密码学问题

密码学及其应用 —— 密码学的经典问题 凯撒密码是最简单的单字母替换加密方案。这是一种通过将字母表中的字母固定解密下面的文本,该文本通过对一个去除了空格的法语文本应用凯撒密码获得:下面的柱状图显示了字母在法语中出现的频率。 阅读详情

密码学

  1. 概念:密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。维基百科
  2. 为什么会有密码?小到藏私房钱,偷画隔壁小妹妹,大到国家信息防泄漏。密码设计的好,别人偷到你的秘密信息的几率就越低。看过谍战片的朋友应该都见过一些密码学的东西,比如二战时的电报密码等
  3. 程序编程中的密码学,网络通信的安全更是重中之重,老大难的问题,前端开发中也难免不会碰到安全问题。
  4. 密码碰撞:密码A的md5加密:md5(A)和密码B的md5加密:md5(B)的结果相等。用户甲自己设置的是密码A,但是黑客乙用一系列密码(包含B)逐个测试,最后发现密码B也也可以进入A的账户,就可以说密码B碰撞成功
  5. md5加盐:用户自己设置的静态密码(一段时间内不会发生改变的密码)和服务器校验时用的动密码拼接后在加密,提高密码复杂度,称为md5加盐。sha1加盐也一样
  6. 密码破译成本:指破译一个密码需要的计算量(消耗的精力)和消耗的时间的多少。随着计算机的发展,密码破译成本逐渐转为:内存占用成本(md5、sha1等映射存储)、硬件消耗成本和时间成本。举个简单的栗子:一个小偷想破译一个卖菜大婶的保险柜密码(假设可以让他破译无数次),所有可能的密码有2^32次方(32字节的安全密码,约3.4x10^32)次,每次碰撞需要消耗0.3毫秒,那么消耗的时间可能为:Math.pow(2,32) * 0.3 / 1000 / 3600 / 24 / 365 约等于 15 天,那么在准备破译这个密码时,他就要考虑最坏结果,可能让他的电脑日夜工作半个月才能破译这个密码,还得保证人家不改密码,这个成本就有点儿太高了,明智的黑客都不会选择去破译这个密码,除非有特殊需求

做前端开发,为什么我要了解密码学

  1. 如果这个世界上没人想知道其他人的小秘密,那就不需要密码 => 我也就不需要了解密码学咯
  2. 如果这个世界上没有黑客(想尽一切办法去破解别人的小秘密的人群也暂且给你们一定高帽子哦),那么简单的密码就可以保证我们的信息安全 => 我也不需要了解密码学
  3. 如果我不在乎别人破译我的个人密码和我自己开发的软件系统,破罐子破摔的 => 我还不如不设置密码!
  4. 以上三种情况都不符合我和这个世界,那么我就了解下咯

先抛出几个概念

  1. 绝对安全的密码?:不存在的,所有密码都可能被碰撞或者被破解
  2. 黑客可以破解所有的密码?:不存在的,除非他的寿命无限长,否则总有密码他没破解就老死的
  3. 6位数的密码不可靠?:不一定的,有的系统会给你加salt,使你的密码复杂度提高很多
  4. 别人给我的密码加盐,我是不是可以随便设置简单的密码?:安全防护还是要自己来做的,你能确定人家给你加的不是静态盐(下面会讲静态盐的危害)?

常用的前端加密

  1. MD5、sha1加密

    • 使用场景:用户登录界面、信息验证界面
    • 使用方法:md5(password) 将用户密码转换为一个大于(或等于)128字节的无序密码,后端存储加密后的字符串或者原密码,通过比较加密后的密码是否相同来验证密码是否正确
    • 特点:单向性,只能加密,无法解密(现有的解密方法是通过碰撞来实现的映射库)。长度固定
    • 实现原理:这个实现很复杂,涉及很多二进制位运算,这里就不过多解释(其实我是看不懂!)
    • 破解方法:碰撞破解
      第一步:建立一个大型的数据库,把日常的各个语句,通过MD5加密成为密文,不断的积累大量的句子,放在一个庞大的数据库里.
      第二步:比如一个人拿到了别人的密文,想去查询真实的密码,就需要那这个密文去到提供这个数据库的公司网站去查询.
      
  2. MD5、sha1优雅的使用方法:secretCode + saltKey 俗称“加盐”
    • 使用场景:用户登录界面、信息验证界面
    • 使用方法:根据用户名从服务端拿到对应的salt (一般是动态的,静态的salt下面在详述),将salt和password拼接在一起,加密拼接的字符串,后端验证服务端的密码和salt拼接加密后的密码是否和前端传过来的密码一致来判断密码是否正确
    • 特点:单向性,只能加密无法解密。复杂度几何倍数增加:通过碰撞找到原密码的几率增加2的128次方倍(MD5)和2的160次方倍(sha1),使密码被破译的几率减小很多
    • 静态盐:指服务端给用户创建的salt是静态的,不论过去多长时间都不会发生改变,严格来说,这种就等于没有加盐,用碰撞来破解这个密码依然只需要碰撞出 你的密码+固定盐这个集合就可以,既没有增加破解时间,也没有增加破解次数上限,所以静态盐不具备aslt的基本功能
    • 加盐:再来说下这个概念,salt必须为服务端动态生成或每隔一段时间就改变一次的,否则就像上面的解释,加盐跟没加几乎一样
  3. js异或加密解密

    • 使用场景:敏感数据交互。代码或文件加密。恶搞,单纯的想让黑客小朋友走几步弯路
    • 实现原理:如果 A^B=C, 那么 A^C=B 和 B^C=A都是成立的

      // js的位异或运算符`"^"`
      // 对称位数上的数字都是0或者1,则为0,一个为0一个为1则为1
      // 例如:
      8 ^ 3 // 输出 11
      // 用二进制运算就是:(0b表示后面跟的是二进制编码的字符)
      0b1000^0b0011 == 0b1011 // 返回 true
      // 反过来:
      11^3 == 8 // true
      0b1011^0b0011 == 0b1000 // true
      11^8 == 3 // true
      0b1011^0b1000 == 0b0011 // true
      // 根据这个规则,就可以实现位异或运算的加解密了:真实密码A和密钥B生成 加密字符串:A^B 记为 C
      // 甲把密钥B告诉乙,再把C传给乙,乙就可以用 C^B 翻译出真实密码A
      // 不知道密钥的黑客丙想破解甲的真实密码A,他需要拿C去跟很多种可能的密钥进行碰撞,只要密钥的长度够长,并可能需要花几百年去破解
      
      // 示例
      function secret (key, str) {
        let finalSecret = ''
        let midSecret = ''
        key += ''
        str += ''
        for(let i = 0; i < str.length; i ++) {
          for(let j = 0; j < key.length; j ++) {
            midSecret = str.charCodeAt(i) ^ key.charCodeAt(j)
          }
          finalSecret += midSecret
        }
        return finalSecret
      }
      
      // 密钥:‘hello’,加密:‘world’
      secret('hello', 'world') // "24029311"
      // 解密
      secret('hello', '24029311') // world
    • 特点:可实现加解密,设置足够大的密钥可以生成复杂度极高的加密密码,但对应的加解密时间也会增加

  4. bash64加密

    • 使用场景:电子邮件、网络证书传递、url地址传递等
    • 使用方法:

      // 先引入base64.js,获取到Base64对象
      // 使用`Base64.encode(str)`方法进行加密
      Base64.encode('admin') // "YWRtaW4="
      // 使用`Base64.decode(str)`方法进行解密
      Base64.decode("YWRtaW4=") // "admin"
    • 实现原理:用6个字节表示一个字符,替代传统的8字节一个字符,超出的字节会放入下一个base64字符中,对应的3个字符会转为4个base64字符。而不够3个字符的情况会自动用=填充一个base64“空”字符,例如:

      // 加密字符a
      Base64.encode('a') // "YQ=="
      // 第一步: a 的二进制表示为: 00001010
      // 第二步: 转换为Base64编码时,不够3字节,那么先给后面补上2字节的空字符: 00001010 00000000 00000000
      // 第三步: 开始转换base64编码:第一个字符: 000010 第二个字符:100000 第三个和第四个都为 000000 保证对应的二进制位数不变
      // 第四步: 查base64的二进制映射表,映射为对应的base64字符: 第一个:Y,第二个:Q,第三个和第四个都是空字符,在base64中用“=”表示空字符,加密结果:YQ== 
    • 特点:可加解密,可对ASCII编码0-128的隐藏字符进行编码传输,避免有些隐藏字符在网络传输中丢失
C语言-快速得到模p的平方剩余 快速得到模p的二次剩余 二次剩余 在数论中,特别在同余理论里,一个整数 X对另一个整数p的二次剩余(英语:Quadratic residue)X的平方除以p得到的余数。 当存在某个X,式子X^2=d(mod p)成立时,称d是模p的二次剩余 注意x和d都是对mod p成立的,这里只能取[1,p-1]. 注意到有(a,m)=1,因此平方剩余d不会是0 若在范围内找不到x使得x^2的同... 阅读详情

相关推荐

前端密码学开发实战:解决crypto.getRandomValues环境兼容性问题

密码学是现代Web应用安全的核心基础,它通过加密算法、哈希函数和随机数生成等技术,确保数据传输与存储的机密性、完整性和不可否认性。其原理基于数学难题的复杂性,为数字世界提供了可信的安全基石。在工程实践中,密码学技术价值体现在构建安全登录系统、区块链交易、实时通信加密等场景。尤其在Web3、金融科技等高安全要求领域,前端开发者需要直接调用浏览器提供的Web Crypto API实现密码学操作。然而,开发环境与生产环境的差异常导致兼容性问题,例如crypto.getRandomValues方法在Node.js环

weixin_29325007的博客 256

密码学常见困难问题DLP,CDH,DDH,GDH,BDH,CBDH,DBDH,GBDH,更新中

密码学常见困难问题:DLP,CDH,DDH,BDDH,

song_qing_8的博客 1万+

前端开发中的MD5加密技术应用

在现代信息技术中,信息传输加密的目的是确保数据在传输过程中的安全,防止数据被窃取或篡改。信息加密通常分为两大类:对称加密和非对称加密。对称加密使用相同的密钥进行数据的加密和解密,效率高,但密钥的安全分发成为了一个挑战。非对称加密使用一对密钥,一个公钥和一个私钥,解决了密钥分发的问题,但计算速度较慢。而MD5作为一种散列函数,并不直接用于加密过程,而是用于验证数据的完整性和一致性。

weixin_42465140的博客 1070

前端加密的方式汇总

随着信息和数据安全重要性的日益凸显,如何保证信息数据在传输的过程中的安全成为开发者重点关注的内容。前端加密通常是指在浏览器中对各种传输的数据进行各种加密操作。然而前端加密更多的是用来对传输的数据进行简单的混淆,为了确保数据在传输过程中不被轻易的篡改和读取。可供我们选择的加密方式有很多种,需要我们在开发过程中根据实际的场景选择适合自己的加密解决方案。那么,本文将结合应用场景来介绍一下前端开发中常用的加密方法。

任磊 6146

DB2__基本概念——联邦

建立联邦 优点:优点是数据仍然保留在原来的存储位置,而不必建立一个集中的式数据仓储。  缺点:数据联邦查询反映会慢,不适合频繁查询,而且容易出现锁争用和资源冲突等问题 建立联邦表步骤 前提条件:知道两个数据库的ip,用户名,密码及被连数据库的版本 eg:  数据库  qqdb  ip: 22.5.225.225   端口:50000    密码:123456        数据库   ...

qq_38569524的博客 1257

PCB工艺-SI9000使用教程

本文介绍了阻抗计算工具SI9000的使用方法,重点讲解了微带线与带状线的区别、共面阻抗概念及参考面选择。通过USB差分走线实例,详细说明了如何选择计算模型、填写参数并确定线宽线距。文章还提供了层叠设计资料和工厂常规阻抗表格作为参考,建议制板时标注需控阻抗的线路供板厂调整。最后简单提及了嘉立创阻抗计算工具作为备选方案。

weixin_50120208的博客 2028

密码学中的常见困难问题

如果给定一个问题实例作为输入,在多项式时间内找到这个问题实例的正确解的概率是l的一个可忽略的函数,用ελ(简称ε)表示,那么用安全参数λ生成的计算问题是困难的。如果λ不够大,计算问题肯定很容易。下面给出一些计算难题,其中GG×G→GT​。gga∈GG是一般的循环群,a∈Zp​a给定gga∈G,在循环群上计算出指数a是困难的。(因为它涉及在有限群中通过逆运算(即对数)来找回指数a,这在一般情况下是计算上非常困难的。ggagb∈。

qq_45983946的博客 1713

【Unity人物动画】SALSA With RandomEyes (语音生成嘴型/人物说话) 使用

SALSA使用探索 之前做项目时想做人物说话的嘴部动作,因为我们的语音是AI合成的,语音片段很多,如果能根据语音生成嘴部动画,那将极大便利我们的工作。后面是找到了SALSA的这款插件,并摸索出使用方法。 1 插件介绍 官方网站:https://crazyminnowstudio.com/ 一个能做2D纸片人和3D人物模型嘴部和眼睛动画的插件,由两人组成的独立工作室(疯狂米诺工作室)开发。 插件全名为SALSA With RandomEyes,2014年上架Asset Store,目前是已下架,替换为新版本

里约热内驴的博客 1万+

密码学-困难问题学习(更新中)

如果对于一个整数。

m0_47659650的博客 1834

TMC5160电机驱动芯片实战:从模式选择到参数配置全解析

本文深入解析TMC5160电机驱动芯片的实战应用,涵盖三种核心工作模式的选择策略与参数配置。详细介绍了全功能运动控制、外部脉冲驱动及独立驱动模式的应用场景与配置要点,并提供了电流控制、静音优化、SPI通信及高级功能(如StallGuard2)的调优指南,帮助开发者充分发挥其高精度、低噪音性能。

weixin_29179311的博客 325

AM243x多核MCU启动流程解析与OSPI Flash烧录实战

嵌入式系统开发中,引导加载器是芯片上电后执行的第一段软件,负责初始化硬件、加载操作系统或应用程序。其工作原理通常遵循多级引导链,从ROM固件到用户可定制的二级引导程序,逐级建立完整的软件运行环境。这一机制的技术价值在于实现可靠的系统启动、支持安全校验,并为多核异构架构提供协同基础。在应用场景上,引导加载器广泛应用于工业控制、汽车电子和物联网设备,确保设备能从非易失性存储器中自主启动。本文聚焦于TI AM243x这类高性能多核MCU,深入剖析其包含RBL和SBL在内的三级启动流程,并详细演示如何通过UART接

weixin_28703451的博客 584

前端开发语言大盘点

前端开发语言日新月异,不断推陈出新。但万变不离其宗,HTML、CSS、JavaScript仍然是前端开发的三驾马车,是每个前端开发者必须掌握的基础技能。其他语言和框架则是在此基础上的延伸和补充,选择合适的技术栈,能够极大地提高开发效率和代码质量。作为前端开发者,了解和学习不同的前端语言和框架,有助于开阔视野、提高技能、应对变化。但同时也要避免盲目追新,根据实际需求和项目特点,选择成熟、稳定、适合的技术方案。保持持续学习和实践,跟上前端技术的发展步伐,才能成为一名优秀的前端开发者。

宋志辉的博客 3929

[QMT量化交易小白入门]-二、如何用miniQMT获取沪深A股的板块列表、历史行情数据和实时行情数据

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 5661

Web3前端开发有哪些必备技能?

Web3前端开发涉及多个关键技能,包括对区块链技术、智能合约、密码学、数据结构以及Web3.0相关技术的深入理解。通过掌握这些技能,前端开发者可以更好地参与到Web3项目的开发中,构建出既安全又高效的去中心化应用。

2301_77292307的博客 682

基于Matlab模拟六自由度Stewart并联机器人运动学逆解

在现代工业和科学领域中,机器人技术的发展已经取得了巨大的进步,为生产和研究提供了许多便利。其中,六自由度Stewart并联机器人是一种广泛应用于各种领域的机器人系统。它具有高精度、高刚度和高可靠性的特点,被广泛应用于飞行模拟器、手术机器人和运动仿真等领域。然而,要使Stewart并联机器人能够实现复杂的运动任务,我们需要了解其运动学逆解。运动学逆解是指根据机器人末端执行器的位置和姿态,计算出各个关节的角度和长度。这对于控制机器人的运动非常重要,因为它可以帮助我们确定机器人各个关节的运动范围和工作空间。

qq_59747472的博客 1129

【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)

在游戏发展史上,有些游戏以其简单而耐玩的特性,深深地烙印在了玩家的记忆中。《黄金矿工》就是其中之一,它曾经在4399等游戏平台上掀起了一股游戏热潮。这款游戏不仅给无数玩家带来了欢乐,还让他们体验到了挖掘金矿的刺激与乐趣。在这个项目中,我们将花费半天的时间,利用Unity引擎,重新打造这款经典小游戏。通过复刻《黄金矿工》,我们不仅是在向童年的回忆致敬,更是在挖掘游戏设计的精髓。在这个过程中,我们将学习如何实现游戏的核心玩法,设计简洁而有效的游戏机制。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2904

Node-Forge未来发展方向:ECMAScript新特性与密码学趋势终极指南

Node-Forge作为JavaScript原生TLS和密码学工具库的领军者,正站在技术演进的前沿。这个强大的加密库不仅提供了完整的TLS协议实现,还包含了丰富的密码学工具集。随着ECMAScript标准的不断发展,Node-Forge面临着拥抱新特性和应对密码学挑战的双重机遇。🚀 ## ECMAScript新特性带来的性能优化 随着ES6到ES14的逐步演进,JavaScript语言本身正

gitblog_00024的博客 656

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

量子加密:Post-Quantum密码学的前端适配

Post-Quantum密码学(后量子密码学)旨在抵抗量子计算机攻击,传统加密算法(如RSA、ECC)在量子计算机下可能被快速破解。量子加密技术如量子密钥分发(QKD)和基于格的加密(Lattice-based Cryptography)是当前研究重点。前端适配需考虑算法复杂性、性能开销及与现有协议的兼容性。

KrFUR0cMr的博客 427

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

financial-services 数据包构建实战:从 CIM 到投资委员会级 Excel 工作簿的 Datapack Builder 完整指南

`datapack-builder` 是 [financial-services 仓库](https://link.gitcode.com/i/8afc83c41571b2b8b8628f720ac6b0ae) 中投资银行垂直插件([plugins/vertical-plugins/investment-banking](https://link.gitcode.com/i/02631d29f84

gitblog_01002的博客 1129

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

密码学库设计启示:crypto-js 模块化架构对现代 JS 库的影响

在前端开发中,如何优雅地处理复杂功能并保持代码可维护性一直是开发者面临的挑战。当项目规模扩大,代码往往变得臃肿不堪,难以扩展和测试。而 crypto-js 作为一个成熟的密码学 JavaScript 库,其模块化架构为我们提供了宝贵的设计思路。本文将深入剖析 crypto-js 的模块化设计,看看它如何将复杂的密码学算法拆解为可复用的组件,并探讨这种架构对现代 JS 库开发的启示。 ## 一、c...

gitblog_00766的博客 419

金融支付系统的前端开发与用户体验

1.背景介绍 金融支付系统的前端开发与用户体验 1. 背景介绍 金融支付系统是现代金融行业的核心基础设施之一,它为用户提供了安全、高效、便捷的支付服务。随着互联网和移动互联网的普及,金融支付系统的发展取得了巨大进步。前端开发在金融支付系统中扮演着至关重要的角色,因为它直接影响到用户体验和安全性。 本文将从以下几个方面进行深入探讨: 核心概念与联系 核心算法原理和具体操作步骤 数学模型公...

AI天才研究院 511

信息安全与密码学博士:应该掌握的52个知

密码学是一个高度跨学科的领域,包含纯数学、计算机科学以及电子工程等多方面的知识。考虑读研读博的学生专业知识背景不一,Bristol大学对这方面的知识点进行了一个全面的总结和覆盖。52个知识点,Bristol大学推荐所有博一学生花一年的时间应该基本掌握,也就是差不多一个星期掌握一个知识点。掌握这些知识点后,对之后的课堂学习、项目执行、论文研读、科研协作、参加国际会议、与密码学者沟通会大有益处;要不然,可能一直处于懵懵懂懂的状态,荒废学业。

Trust Bo 8287

前端开发失业了能转行做什么?

给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。给自学的小伙伴们的意见是坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。

QIANDXX的博客 989

区块链需要学习哪些东西_区块链课程需要学习哪些内容?

现阶段随着区块链技术和相关应用的发展,区块链领域正在变得炙手可热,很多朋友看到了区块链的发展前景和空间,纷纷投身于区块链的学习中。那么,区块链课程需要了解哪些内容呢?1、区块链主流语言——Go语言。Go语言作为强类型的编译型语言,灵活性上自然不如解析型语言。但是Go语言提供了Any类型(interface{})和强大的类型反射(reflect)能力,二者相结合,开发的灵活性上已经很接近解析型语言。...

weixin_35060251的博客 4918

《椭圆曲线数论与密码学》例11.5详细过程

(这个例子写的也太抽象了,一步跳三步。在这里重新按照我小学生标准整理一下哈哈哈。) 题目 Let EEE be the elliptic curve over F7\mathbb{F}_7F7​ defined by y2=x3+2. y^2 = x^3 +2. y2=x3+2. Then E(F7)[3]≃Z3⊕Z3E(\mathbb{F}_7)[3] \simeq \mathbb{Z}_3 \oplus \mathbb{Z}_3E(F7​)[3]≃Z3​⊕Z3​. Let’s compute e3((0

lanvender55的博客 1548
上一篇: Electron 结合WEB项目制作桌面APP之二 ---- electron与web的结合开发体验
下一篇: Windows环境下 mongodb 安装爬坑
EricLua
博客等级 码龄10年 34粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值