草庐IT

密码学复习-2 分组密码

T1M@ 2024-02-12 原文

分组密码:将一个明文块作为一个整体来处理,并用来产出等长的密文块的一种密码。

流密码:对数字流一次加密一位或者一个字节的密码。

Feistel建议使用乘积密码的概念来逼近理想分组密码。

乘积密码:是指依次使用两个或两个以上的基本密码,所得结果的密码强度将强于所有单个密码的强度

分组密码的基础:为统计分析制造障碍

混淆:使明文和秘钥之间的关系变得复杂

扩散:使明文和密文之间的关系变得复杂

分组密码类型:DES、2DES、3DES、AES

DES:16轮迭代

 

 密钥生成

DES:明文长度64位,秘钥长度56位 3DES:秘钥长度168位

DES:初始置换, 轮操作包括:扩展置换、与子密钥异或、压缩置换、置换、与另一部分进行异或

雪崩效应:当明文或秘钥发送微小变化时,密文就会发生显著变化。

双重DES:秘钥长度112位,中间相遇攻击。

中间相遇攻击:这是一种针对双重加密算法的攻击,需要已知的明文和密文对,在本质上明文被加密在双重加密中产生一个中间值,密文被解密在双重加密中产生一个中间值。

为了防止中间相遇攻击:使用3DES

3DES:为了增强DES的强度,将DES重复3次所得到的的一种密码算法,3DES是加密->解密->加密->,秘钥长度168位。

AES:秘钥长度128位(10轮)、192位(12轮)、256位(14轮)

                                 AES-128

字节代换:S盒

行移位:第一行不变,第二行循环左移1位,第三行循环左移2位,第四行循环左移3位。

列混淆:

溢出之后模10001

轮秘钥加:模2加不进位不借位。

分组密码的工作模式:

电码本模式ECB:用相同的秘钥分别对明文分组单独加密。

密文分组链接模式CBC:加密算法的输入是上一个密文分组和下一个明文分组的异或。

加密:C1=E(K,P1IV),Cn=E(K,PnCn-1)

解密:P1=D(K,IV)C1,Pn=D(K,Cn-1)Cn-1

假设P1本来就有一位发生了错误,这个错误要扩散至多少个密文分组?对接收者解密后的结果有什么影响?

C1=E(K,IVP1),C2=E(K,C1P2)......Cn=E(K,Cn-1Pn)所以会影响所有的密文分组。 

P1=D(K,C1)IV,P2=D(K,C2)C1=D(K,E(K,C1P2)),C1=C1C1P2=P2。影响P1。

传输C1时发生的错误将会影响哪些明文分组?

P1=D(K,C1)IV,P2=D(K,C2)C1,P3=D(K,C3)C2。所以会影响P1,P2。

密文反馈模式CFB:一次处理输入的s位,上一个密文分组作为下一个加密算法的输入,产生的伪随机数输出与明文异或后作为下一个单元的密文。

在8位的CFB模式中,若传输中一个密文字符发生了一位错,这个错误将传播多远?

P1-P9

输出反馈模式OFB

计算器模式CTR

有关密码学复习-2 分组密码的更多相关文章

  1. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  2. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  3. ruby - 在 Ruby 中创建按公共(public)键值分组的新哈希 - 2

    假设我有一个在Ruby中看起来像这样的哈希:{:ie0=>"Hi",:ex0=>"Hey",:eg0=>"Howdy",:ie1=>"Hello",:ex1=>"Greetings",:eg1=>"Goodday"}有什么好的方法可以将它变成如下内容:{"0"=>{"ie"=>"Hi","ex"=>"Hey","eg"=>"Howdy"},"1"=>{"ie"=>"Hello","ex"=>"Greetings","eg"=>"Goodday"}} 最佳答案 您要求一个好的方法来做到这一点,所以答案是:一种您或同事可以在六个月后理解

  4. ruby-on-rails - 在 Rails 中自定义 "Password confirmation doesn' t 匹配密码 - 2

    有没有办法在Rails中为确认字段自定义消息?例如在设计中我必须输入密码和password_confirmation并且错误消息是:Passwordconfirmationdoesn'tmatchPassword我可以更改事件记录语言环境消息(“不匹配”),但它会在该语言环境消息的开头和结尾输出密码确认和密码,所以我得到如下内容:"PasswordconfirmationmustmatchPassword"有没有办法将其更改为不同的字符串?PasswordconfirmationandPasswordmustmatch.编辑另一件事是拥有完全自定义的消息,例如:'Setpassword

  5. arrays - 如何在下面的示例中将两个值数组分组为 n 个值数组? - 2

    我已经有很多两个值数组,例如下面的例子ary=[[1,2],[2,3],[1,3],[4,5],[5,6],[4,7],[7,8],[4,8]]我想把它们分组到[1,2,3],[4,5],[5,6],[4,7,8]因为意思是1和2有关系,2和3有关系,1和3有关系,所以1,2,3都有关系我如何通过ruby​​库或任何算法来做到这一点? 最佳答案 这是基本Bron–Kerboschalgorithm的Ruby实现:classGraphdefinitialize(edges)@edges=edgesenddeffind_maximum_

  6. ruby - 如何将相同的相邻数字分组 - 2

    如果至少有两个相邻的数字相同,格式为,我需要打包.这是我的输入:[2,2,2,3,4,3,3,2,4,4,5]以及预期的输出:"2:3,3,4,3:2,2,4:2,5"到目前为止我试过:a=[1,1,1,2,2,3,2,3,4,4,5]a.each_cons(2).any?do|s,t|ifs==t如果相等,也许可以尝试计数器,但那是行不通的。 最佳答案 您可以使用Enumerable#chunk_while(如果你使用的是Ruby>=2.3):a.chunk_while{|a,b|a==b}.flat_map{|chunk|chu

  7. ruby-on-rails - 我如何比较 'Bcrypt' Gem解密的密码和加密的密码 - 2

    我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,

  8. ruby-on-rails - 如何在记录更新期间从验证中排除密码字段? ( rails 3.0.4, ruby 1.9.2) - 2

    我有一个允许更新用户记录的表单。它包含:password和:password_confirmation字段,但我不希望在数据库中已存储加密密码时对它们运行验证。View文件中的字段:'ConfirmPassword'%>在互联网上搜索时,我发现了这段代码,我认为它是针对以前版本的Ruby/Rails的。(我会把它放在我的用户模型中。)validates_presence_of:password,:on=>create由于我的用户模型中密码验证的语法不同(如下),我对我需要的语法感到困惑。validates:password,:presence=>true,:confirmation=>

  9. ruby-on-rails - Devise 在更改密码后注销用户 - 2

    我正在使用devise,当用户更改密码时,网站会将他们注销。我在网上读到,添加sign_in可以解决问题但不起作用,并且当密码更改时用户会注销。这是我的代码if@user.errors[:base].empty?and@user.update_attributes(params[:user])sign_in(current_user,:bypass=>true)flash[:success]="Useraccounthasbeensuccessfullyupdated"redirect_toedit_user_path(params[:site_id],@user)elserender

  10. ruby - 存储外部 API 的密码 - 最佳实践 - 2

    如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。

随机推荐