自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 《Python机器学习基础教程》第7讲:模型评估与改进:让模型更靠谱

今天,我们学习了模型评估和改进,包括准确率、精确率、召回率、F1分数、交叉验证和网格搜索。模型评估就像是给模型打分,交叉验证可以更全面地评估模型的性能,网格搜索可以找到最优的模型参数。如果模型的性能不够好,我们可以尝试更复杂的模型,比如随机森林或者梯度提升树。模型评估和改进是机器学习里非常重要的一部分,它能帮助我们找到更好的模型。比如,你可以用交叉验证和网格搜索优化房价预测模型,让模型更准确地预测房价。

2025-03-31 08:49:20 117

原创 《Python机器学习基础教程》第6讲:特征工程:让数据更有用

1. 特征工程:给数据“化妆”想象一下,你手里有一堆照片,你想用这些照片训练一个模型,让模型能识别照片里的人是不是在笑。但是,这些照片有的很暗,有的很亮,有的是黑白的,有的是彩色的。如果直接用这些照片训练模型,效果可能不会很好。这时候,就需要特征工程来帮忙了。特征工程的核心任务是提取数据中的有用信息,去掉无用信息。比如,你可以把照片的亮度调整到一致,或者把照片转换成灰度图,这样模型就能更容易地学习到照片里的特征。2. 处理分类变量:让机器理解“类别”

2025-03-31 08:46:24 7

原创 《Python机器学习基础教程》第5讲:聚类算法:让计算机帮我们分组

今天,我们学习了聚类算法,包括k均值聚类、凝聚聚类和DBSCAN。k均值聚类是最简单的聚类算法,适合把数据分成规则的簇;凝聚聚类可以发现数据的层次结构;DBSCAN可以发现复杂形状的簇和噪声点。聚类算法就像是给数据做“分类”,帮助我们发现数据里的不同群体。比如,你可以用聚类算法分析客户数据,把客户分成不同的群体,然后针对每个群体制定不同的营销策略。

2025-03-29 06:16:02 18

原创 《Python机器学习基础教程》第4讲:无监督学习与降维技术

本讲介绍了无监督学习中的降维技术,包括PCA、NMF和t-SNE。PCA可以找到数据中最“重要”的方向,NMF可以提取非负的成分,t-SNE可以保留数据的局部结构。这些技术不仅能简化数据,还能帮助我们更好地理解数据。降维技术就像是给复杂的数据做“压缩”,让数据变得更简单,更容易分析。比如,你可以用PCA来简化高维数据,用NMF来提取有意义的成分,用t-SNE来可视化复杂的数据。

2025-03-29 06:13:23 135

原创 《Python机器学习基础教程》第3讲:回归算法与模型优化

今天,我们学习了回归算法,包括线性回归、岭回归和Lasso回归。我们还学习了怎么用网格搜索和交叉验证来优化模型。通过波士顿房价数据集的实践,我们看到了这些算法的实际效果。回归算法就像是用一条直线来预测数值,但有时候这条直线可能会太复杂,导致过拟合。这时候,我们需要用正则化来给模型加点“魔法”,让它变得更鲁棒。网格搜索和交叉验证则是优化模型的好帮手,它们能帮我们找到最好的模型参数,评估模型的性能。

2025-03-24 14:35:35 155

原创 《Python机器学习基础教程》第2讲:监督学习与分类算法

k近邻算法也是类似的,它会看一个点周围的“邻居”,然后根据这些邻居的类别来决定这个点的类别。这就需要模型评估了。比如,你可以用k-NN来判断一个新客户是不是潜在的优质客户,用逻辑回归来预测一个病人是否患有某种疾病,或者用决策树来判断一个邮件是不是垃圾邮件。决策树的优点是容易理解,模型可以可视化,但缺点是很容易过拟合,也就是说,它可能会把训练数据学得太好了,导致在新的数据上表现不好。具体来说,k-NN算法会找到离目标点最近的k个点(这些点就是“邻居”),然后看这些邻居中哪个类别最多,就把目标点归为那个类别。

2025-03-24 14:32:40 189

原创 《Python机器学习基础教程》第1讲:机器学习入门与Python基础

我们需要先检查数据有没有错误,有没有缺失值,然后可能还需要把数据标准化(让所有特征的数值范围差不多),这样才能让模型更好地学习。今天,我们开启了机器学习的大门,了解了它是什么,以及监督学习和无监督学习的区别。我们可以看到,每行数据代表一朵鸢尾花,有4个特征(花瓣长度、宽度,花萼长度、宽度)和一个目标值(花的种类)。数据就像是机器学习的“食材”,但很多时候,这些食材并不完美。有的数据可能有错误,有的可能缺失,还有的可能格式不对。下一讲,我们会深入到监督学习的世界,学习分类算法,看看怎么用机器学习来预测类别。

2025-03-22 06:27:01 246

原创 《Python深度学习》第七讲:生成式深度学习

在深度学习的世界里,生成式模型是一种非常有趣且富有创造力的技术。它们能够生成全新的内容,比如文本、图像、音乐等,甚至可以创造出从未见过的虚拟世界。这一讲,我们将深入探讨生成式深度学习的核心技术,包括 LSTM 文本生成、DeepDream、神经风格迁移、变分自编码器(VAE)和生成式对抗网络(GAN)。这些技术不仅展示了深度学习的强大能力,还为创意和艺术带来了新的可能性。

2025-03-22 06:18:12 287

原创 Effective Python:(23)列表推导

我们常用的办法可以用循环实现,或者采用map和filter,和通过lambda来实现,写法会显得繁琐,并不好读懂。列表推导也是Python的一种特殊便捷写法,用于方便的从一个列表数组,通过某种变换映射复制成另一个数组。除了列表推导形式,还有字典推导和集合推导,分别适用于相应的数据结构的元素变换,非常方便。用推导就简单直接的多,而且可以实现过滤某些类型元素到新数组。

2025-03-20 16:58:04 88

原创 Effective Python:(22)函数修饰器

这虽然方便多了,但是也需要注意一个问题,就是调用用修饰器修饰的函数时,函数外层打印出来无法反映函数内部的对变量的改变,为了解决这个问题,我们可以用funtools下面的wraps辅助函数来实现,wraps叫做修饰器的修饰器,其特性就是把内部数据拿到外部来用,这就解决了这个问题。修饰器这么来用,比如我们可以先定义一个名叫wrapper的修饰器的方法,方法代码内部包裹的函数的调用,并在其前后加上了处理和打印代码。函数的用法和技巧就介绍这么多,下面条目开始关于推导和生成的用法。

2025-03-20 16:56:41 167

原创 《Python深度学习》第六讲:高级深度学习最佳实践

函数式 API 允许你直接操作张量,把层当作函数来使用。你可以通过这种方式构建复杂的网络结构,比如多输入、多输出的模型。这里,Input定义了输入张量的形状,是层的函数形式,最终通过Model将输入和输出张量组合成一个模型。TensorBoard 是一个基于浏览器的可视化工具,可以帮助我们监控模型的训练过程。在训练模型时,使用 TensorBoard 回调函数来记录日志。通过浏览器访问,你可以看到模型的训练指标、激活直方图等信息。

2025-03-18 09:08:29 183

原创 《Python深度学习》第五讲:文本处理中的深度学习

在这一讲中,我们详细探讨了深度学习在文本处理中的应用。从文本的预处理、向量化到复杂的模型构建,我们通过具体的代码和例子,了解了如何使用深度学习技术来处理和生成文本数据。无论是文本分类、情感分析还是文本生成,深度学习都为我们提供了强大的工具。

2025-03-18 09:05:28 184

原创 《Python深度学习》第四讲:计算机视觉中的深度学习

CNN是一种专门用于处理图像数据的神经网络。它的灵感来源于人类视觉系统的工作方式。想象一下,当你看到一张照片时,你的大脑会先识别出照片中的边缘、纹理等基本特征,然后逐步组合这些特征,最终识别出照片中的物体。CNN的工作原理也是类似的,它通过多层的卷积操作来逐步提取图像的特征。

2025-03-16 09:55:13 522

原创 《Python深度学习》第三讲:神经网络

Keras是一个非常友好的深度学习框架,它就像是一个乐高积木套装,你可以用它轻松地搭建出复杂的神经网络。Keras背后有强大的后端支持,比如TensorFlow,它负责处理底层的数学运算。

2025-03-16 09:49:48 249

原创 《Python深度学习》第二讲:深度学习的数学基础

矩阵是一个2维张量,它是一个数字的网格。我们加载了MNIST数据集,对数据进行了预处理,构建了一个包含两个Dense层的神经网络,编译了网络,训练了网络,并在测试集上评估了模型的性能。我们用的是MNIST数据集,这是一个很经典的数据集,包含60,000张训练图片和10,000张测试图片,每张图片都是一个28×28的灰度图像。比如,你可以将一个2D张量和一个1D张量相加,广播会自动将1D张量扩展到2D张量的形状,然后进行逐元素运算。在MNIST数据集中,每张图片是一个28×28的灰度图像,它是一个2维张量。

2025-03-16 09:44:57 441

原创 《Python深度学习》第一讲:深度学习基础

想象一下,你有一堆积木,你可以用一层积木搭一个简单的房子,但如果用多层积木,就能搭出更复杂的城堡。比如,第一层可能学习简单的线条,第二层学习形状,第三层学习更复杂的物体。首先,我们加载MNIST数据集,这是一个包含60,000张训练图片和10,000张测试图片的数据集,每张图片都是一个28×28的灰度图像。现在,我们每天都在产生海量的数据,比如社交媒体上的图片、视频,还有各种传感器收集的数据。比如,Keras是一个非常友好的深度学习框架,它就像是一套乐高积木,你可以轻松地搭建出复杂的神经网络。

2025-03-14 08:47:09 223

原创 《Python深度学习》知识体系拆解

通过电影评论分类、新闻分类和房价预测等任务,说明神经网络在不同类型问题中的应用。通过系统学习本书,读者可以掌握深度学习的基础理论和实践技能,解决实际问题。通过温度预测、情感分析等任务,展示这些模型在自然语言处理中的应用。展示如何通过这些模型生成图像、文本等,探索深度学习的创造性应用。讨论过拟合和欠拟合问题,展示如何通过正则化等方法解决这些问题。通过猫狗分类等实际任务,展示CNN在图像分类中的应用。张量、张量运算、梯度下降等数学概念是深度学习的核心。介绍机器学习的常见任务(分类、回归等)和评估方法。

2025-03-14 06:15:49 26

原创 Effective Python:(21)参数混用

另外一种更规范的用法,参数中用星号分割,星号右边必须是关键字参数,或者用/分割,/左边必须是位置参数,或者既有/,又有星号,那么在这两个符号之间就可以用哪种参数随意。原则上,位置参数和关键字参数只能采用一种形式,如果要在一个函数中混用,则需要注意,关键字必须放在最右边,否则会报错。本条对函数参数的使用问题,进行一个简单的补充,即如何灵活的使用位置参数和关键字参数。以上就是函数参数的用法,下面会介绍一种函数修饰器的用法。

2025-03-10 17:29:27 79

原创 Effective Python:(20)关键词参数

这一点有些像SQL语句的编写,数据表插入操作insert的写法传统的方式要写出所有字段的值,这在表字段比较多的时候很容易写错,不是漏掉一项,就是顺序写错,非常头大。本条继续讨论Python函数参数问题,这里采用了一种更灵活的方式表示参数,也就是采用关键词参数,在传人参数时指定参数的名称,这样既不会担心参数顺序会传错,也不会必须把全部参数都要写完全才行,这样就方便灵活的多了。说回来到关键字参数,如果有指定字典结构,也可以在参数位置直接采用**的写法,带两个星的字典类型变量代表所有参数,更加的方便。

2025-03-10 17:28:31 263

原创 Effective Python:(19)可变数量参数

Effective Python本条涉及函数的参数的数量问题,虽然大多数情况下参数的数量和顺序都是预先设计好的,但是仍然有参数可变的函数,比如C语言常用的main函数的argv,这在格式化打印函数上也很常用,所以Python也需要支持。Python函数对于可变数量的参数的支持方式,类似于unpacking用法中的通配方式,即函数参数的最后位置的参数用加星号的通配参数表示,这样除了固定参数位置和数量必须匹配,后面可以任意通配参数数量。第二个问题,如果需要在通配后再新加新的参数,也需要更新所有处理代码。

2025-03-08 10:53:06 291

原创 Effective Python:(18)作用域问题

要解决赋值的问题,可以给内层方法里改变量声明成nonlocal,这样就是告诉Python我们要把值赋值给闭包外部的变量。但是Python有闭包的概念,可以让内层方法直接引用外层方法的变量,可以读取其值,但是给外层变量赋值,会出现情况,发现无法赋值成功,这是因为内层函数当做新定义一个变量处理了,与外层变量无关。说起来比较简单,就是如何在内层的方法中使用外层方法的变量,就是局部变量的作用域的问题熟悉C语言的知道,是不能直接用函数外的局部变量的,需要通过参数传递,或者直接做成全局变量。

2025-03-08 10:50:09 157

原创 Effective Python:(17)

问题也比较显然,如果需要对于返回值进行判断才能知道意外的值出现,那就必须需要单独的一条判断语句,增加了程序冗余,而且如果在同一个if语句中进行正常0和非正常的none的判断,会产生误判,把异常也当做0的情况进行处理,也会导致程序逻辑出现问题。一种解决办法就是用元组来处理,返回一个二元组,第一个值是返回是否有异常值,第二个元素值作为实际返回变量的值,这种虽然可以解决问题,但是程序还是略微复杂,而且有些程序处理有可能忽略对元组第一个状态值得处理。这种做法值得我们成为习惯!

2025-02-26 20:28:58 125

原创 Effective Python:(16)

Effective Python提供90条Python3的编程建议和技巧,接下来进入函数相关的技巧和话题重点是让函数使用降低出错概率,同时能更好的利用Python创造者设计思想以便于最大限度展现Python的编程和运行效率。本条主要是一条建议,并不是强制规则必须遵守,说的是函数返回值可以是直接unpacking返回成多个数值变量,这样的技巧让函数使用很方便,当然可以同时返回很多数值,但是作者的建议是不要超过3个变量。因此作者建议单独获取的值不要超过3个,其他可以用带星号通配获取。

2025-02-26 20:27:29 252

原创 Effective Python:(14-15)

但是如果对于key对应的值还需要通过一些操作才能获取的情况下,setdefault和defaultdict都存在问题,就是导致对键值的操作重复处理,而且由于多个操作复合在一条语句,如果操作中出现异常则无法判断是在哪里出的异常,会带来麻烦。根据前两条对于需要处理key是否存在的字典运用中,可以用in,KeyError异常来处理,进一步优化为用get带默认值处理,再进一步优化为可以用setdefault方法和直接用defaultdict字典解决。这是本书第17条,是对上一条字典技巧的一个简单有趣的补充。

2025-02-23 11:11:10 226

原创 Effective Python:(13)

一种优化方法是不用in关键字进行一次判断,而直接用异常来处理,这样节省了一次程序判断。在try中直接使用字典中该键的值,而通过捕获KeyError异常,来处理键值不在字典中的情况。在字典的使用中,有一种非常常见的场景,也有非常常见的程序写法,这就是处理key不在字典中的情形,一般程序写法也很好想到,就是先判断key是否在字典中,再根据不同情况分别处理,这种虽然思路很清晰,但是程序代码不够简洁,会导致不论是否在字典中是否存在的,都需要多做一次判断,性能受很大影响。

2025-02-23 11:07:52 270

原创 Effective Python:(12)

这里涉及Dict字典类型,需要注意的就一点,在python3.5以及之前版本,字典里数据项的保存顺序并不是添加字典的顺序,通常是乱序的,这是因为字典的内部构造是采用哈希表的算法来实现的。注意到这点就ok,书中作者还进一步讨论了如果需要将字典元素进行排序的需求实现容易出现的问题以及三种解决办法,感兴趣的同学可以仔细阅读下,并可以在实际编程中使用。但是到了Python3.6和以上版本,调整了这个问题,字典不再是乱序,保证了添加顺序和遍历顺序的一致。

2025-02-08 21:02:34 203

原创 Effective Python:(11)

问题又来了,如果要反序的属性不是可计算的不能加负号怎么办,这里又推荐了一种终极办法,但又是最简单的办法,就是对于同一个列表上多次调用sort方法,一次处理一个属性排序,这个其实也是最通用的算法实现!接下来遇到的问题就是如何用多个属性进行排序,比如先按A排序再按B排序,这里面推荐用元组来实现,即通过lambda构建一个返回值是元组的函数,这样key是元组就可以实现多属性排序。接下来又遇到问题是如果一个属性要升序,一个属性要降序怎么办,对于可计算属性在lambda函数中采用一元减操作符来取反实现反序。

2025-02-08 21:01:38 339

原创 Effective Python:(10)

unpacking我们介绍的之前的条目中有讲解,可以把一个元组通过unpacking操作直接拆解成多个变量,直接使用,免去数组下标的索引的麻烦,但这个unpacking有个限制,就是必须要求拆分的变量数目和顺序必须和元组元素数量相同。前面两条主要介绍切片的实用好玩的用法,这一条里反而建议不用切片,这是什么场景呢?这个场景其实也很常见,就是从一个元组中取出位于起始或结束位置的其中某几项,这样的场景其实很常见,我们最容易想到的方法就是切片,通过切片把需要的部分切出来,然后通过下标进行索引访问数组元素。

2025-01-30 17:52:02 277

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(31):HTTPS和TLS/SSL

对于服务器端的应用程序来说(比如PHP),无须关心是HTTPS还是HTTP,它完全按照HTTP标准处理HTTP头部,负责输出内容,这也体现了TLS/SSL协议的优势,对开发者来说完全是透明的。对于客户端(比如浏览器)来说,发送HTTPS请求就是连接服务器的443端口,将所有的HTTP数据传递给TLS/SSL协议,最终由TLS/SSL协议传递给TCP传输层。《深入浅出HTTPS​​​​​​​​​​》读书笔记(31):HTTPS和TLS/SSL。

2025-01-30 17:49:35 660

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(30):OpenSSL和TLS

◎crypto库函数:具体的密码学算法使用库,比如MD5、RSA、DES算法的实现,开发者可以直接使用这些库,可以理解为底层次库。通过两个维度了解OpenSSL,首先OpenSSL是一个底层密码库,封装了所有的密码学算法、证书管理、TLS/SSL协议实现。同时EVP接口也会基于CPU模式进行性能优化,比如可以通过AES-NI指令集加速AES运算。《深入浅出HTTPS​​​​​​​​​​》读书笔记(30):OpenSSL和TLS。OpenSSL库包含两种类型的库。

2025-01-18 10:29:04 103

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(29):TLS/SSL协议

◎协议设计的复杂性:一个完整的解决方案考虑的问题非常多,需要考虑扩展性、适用性、性能等方面,一旦方案设计不充分,攻击者不用攻击特定的密码学算法,而会基于协议进行攻击。TLS/SSL协议位于应用层协议和TCP之间,构建在TCP之上,由TCP协议保证数据传输的可靠性,任何数据到达TCP之前,都经过TLS/SSL协议处理。◎协议实现的严谨性:即使协议设计是完美的,在实现协议的时候,也可能犯错误;TLS/SSL协议是最常见的安全解决方案,需要注意的是,TLS/SSL协议并不是唯一的解决方案。

2025-01-18 10:27:39 631

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(28):DSA数字签名

对称加密算法有很多算法,标准算法是RSA机密算法,数字签名技术也有一个标准DSS(Digital Signature Standard),其标准算法就是DSA签名算法(Digital Signature Algorithm)◎计算s = ( k^(-1) (H(m) + xr)) mod q, H是特定的摘要算法。◎计算v = ( g^u1 * y^u2 mod p ) mod q。◎计算r = ( g^k mod p ) mod q。◎计算w = s^(-1) mod q。(1)DSA算法的内部结构。

2025-01-12 10:52:25 539

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(27):RSA数字签名

在PHP OpenSSL标准库中,进行RSA数字签名的时候,并没有填充机制的说明,从严谨的角度看可以采用其他第三方库。和RSA加密填充一样,RSA签名算法也有填充机制,分别是RSASSA-PKCS1-v1_5和RSASSA-PSS。RSA加密算法是公钥加密,私钥解密;RSA签名算法是私钥签名,公钥验证签名。《深入浅出HTTPS​​​​​​​​​​》读书笔记(27):RSA数字签名。

2025-01-12 10:51:24 248

原创 Effective Python:(9)

今天切片继续,这条展现的是切片的进一步用法,加上步进参数。python的切片用法还可以有第三个参数,表示取值时间隔多取一个。这里面自然想到比如步进为2可以实现只取数组偶数位置的值,或者只取奇数位置的值,非常方便。另一个好玩的技巧就是步进设成-1,对于bytes类型或unicode类型的字符串,可以实现把字符串反转的效果。但是要注意对于utf8类型就会出错。所以这里面作者给出一个中肯的联系,如果用步进,就不要跟起止下标一块出现,以及尽量不用负数步进,这样容易引起混乱,而导致程序出现错误或异常。

2025-01-05 18:01:59 257

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(26):数字签名

考虑到公开密钥算法运行是相对缓慢的,数字签名算法建议对消息摘要值进行签名,因为摘要值的长度是固定的,运算的时候速度会比较快。◎接收者对摘要值B和签名值A进行比较,如果相同表示签名验证成功,否则就是验证失败。《深入浅出HTTPS​​​​​​​​​​》读书笔记(26):数字签名。◎防伪造:发送的消息不能够伪造,MAC算法也有这个特点。为什么不直接对消息进行签名,而是对消息的摘要值进行签名?◎接收者接收到消息后,拆分出消息和消息签名值A。◎发送者用私钥对摘要值进行签名得到签名值。◎发送者对消息计算摘要值。

2025-01-05 17:49:21 450

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(25):椭圆曲线密码学(续)

为了简化ECC的使用,可以选用设计规范的命名曲线,命名曲线中包含了ECC椭圆曲线的参数,比如基点、有限域等。在ECDH中首先取得一个随机数(k),称之为私钥,kg的结果就是公钥,g是椭圆曲线上的基点,公钥也是椭圆曲线上的一个点,对于ECC密码学来说,通过公钥很难破解私钥。ECC中,k就是私钥,g就是基点,kg基于公式运算最终得到公钥,通过公钥很难计算出私钥k。《深入浅出HTTPS​​​​​​​​​​》读书笔记(25):椭圆曲线密码学(续)◎命名曲线的兼容性,这一点非常重要。【ECDH协商算法】

2025-01-04 22:55:07 366

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(24):椭圆曲线密码学

ECC密码学的关键点就在于就算知道具体方程式、基点(G)、最终点(F),也无法知晓一共打点了多少次(n),这就是椭圆曲线的关键,很难破解打点过程。椭圆曲线有个特点,任意两个点能够得到这条椭圆曲线上的另外一点,这个操作称为打点,经过多次(比如n次)打点后,能够生成一个最终点(F)。必须把所有的操作数限制在一个有限域中,为了控制在有限域中,需要一个很大的质数(p),而这个曲线上的点都必须小于这个质数。ECC是新一代的公开密钥算法,主要的优点就是安全性,极短的密钥能够提供很大的安全性。【ECC算法的基本模型】

2025-01-04 22:53:22 581

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(23):密钥协商算法(续)

而DH算法确切地说,实现的是密钥交换或者密钥协商,DH算法在进行密钥协商的时候,通信双方的任何一方无法独自计算出一个会话密钥,通信双方各自保留一部分关键信息,再将另外一部分信息告诉对方,双方有了全部信息才能共同计算出相同的会话密钥。静态DH算法,p和g两个参数永远是固定的,而且服务器的公钥(Ys)也是固定的。◎客户端根据公开参数生成一个随机数a,这个随机数是私钥,只有客户端知道,且不会进行发送,然后计算Yc = (g ^ a) mod p, Yc就是公钥,需要发送给服务器端。1)静态DH算法(DH算法)

2024-12-29 11:20:12 313

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(22):密钥协商算法

◎客户端使用服务器RSA密钥对的公钥加密会话密钥,并发送给服务器端,由于攻击者没有服务器的私钥,所以无法解密会话密钥。密钥的管理和分配是个难题,尤其是生成一个动态密钥更难,而密钥协商算法就可以解决密钥分配、存储、传输等问题。◎会话密钥的意思就是该密钥不用存储,一旦客户端和服务器端的连接关闭,该密钥就会消失。◎每次连接阶段的会话密钥是不同的,无须存储到设备中,连接关闭后会话密钥就会消失。◎获取会话密钥过程其实并不能称为协商,完全是由客户端决定的,只能称为密钥传输。◎会话密钥的作用就是为了加密解密通信数据。

2024-12-29 11:19:04 459

原创 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(21):密钥存储和传输

需要存储的密钥是静态不变的,也称为长期密钥,在一定时间内都是生效的,除非主动更新或者废弃密钥。可以将密钥硬编码到代码中,密钥由于只有开发者知道,相对来说不存在泄露的可能。为了在网络通信中传输动态密钥,可以采用密码学中的密钥协商算法。◎以口头、邮件的方式传输密钥。◎密钥硬编码在代码中。

2024-12-15 22:35:49 108

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除