从数学到密码学(八)

数学基础(三)

从本节起,我们开始进入大学数学的领域--近世代数(也称抽象代数)。

先给出几个基本概念/定义。

[代数运算]:对于集合A的任意元素a、b,如果按某一运算法则(通常用某个记号,比如*来表示)进行运算,可以得到唯一的结果c∈A,则称运算法则*为集合A上的一个二元代数运算。
说明:
1、代数运算的实质是:定义域和值域都在同一集合上的映射(或函数)。
2、在此语境下,我们也说“集合A在运算法则*下封闭”,或“集合A对运算法则*封闭”,这些说法都是等价的。
3、我们讨论的代数运算都只涉及2个元素,所以通常省去“二元”,称为代数运算,或者简称运算。
4、需要明确的是,*只是一个运算符号,一个记号而已,我们可以用+、^等符号代替它。在上述定义中,我们既不知道也不关心它具体是怎样运算的,所以理论上可以随便用个符号代替(当然在讨论某一个例时,要尽量使用大家都认可的符号)。我们真正关注的是,在此定义下,该运算法则具有哪些通用的代数学上的性质可以为我们所用。可以想见,这些性质与具体运算法则无关,却普遍适用--这正是抽象的威力。

[代数系统]:若集合A具有代数运算*(即对*运算封闭),则称(A,*)是代数系统
说明:
1、具有代数运算的集合或者对运算封闭的集合就是代数系统。代数运算和代数系统是一体两面。
2、有时候,在明确知道代数运算*的情况下,可以省略运算符号,直接称A是代数系统。事实上,我们所讨论都是代数系统,因为没有代数运算的集合没有多大用处。

举例:对于整数集Z,加法运算(用加号+表示)和乘法运算(用乘号*表示)都是Z上的代数运算(很简单,是吧)
比如,取a=2、b=3,由加法运算法则,得到结果5,即2+3=5,由乘法运算法则,则得到结果6,即2*3=6,这说明(Z,+)、(Z,*)构成代数系统。
一个集合上可以有多个代数运算,比如整数集Z上同时定义了加法和乘法运算。

对于商集Z/~={[0]、[1]、[2]、…、[n-1]},在Z/~上定义等价类之间的运算法则+:[i]+[j]≡[i+j],其中i、j为等价类的代表元素
说明:
1、≡读作“定义为”
2、具体运算如下:取两个等价类中的代表元素,将它们相加,然后再做[自然映射]([自然映射]不记得?请看前面的内容)
3、≡左边方括号[]之间的+表示等价类之间的运算,是新定义的运算法则的记号,≡右边的+(在方括号号[]中)表示普通的加法运算。
4、参与运算的对象是等价类,结果也是等价类。但是两个等价类“相加”(即进行+运算)能否得到唯一的等价类,还不明确,因为同一等价类可以有多个代表元素,它们相加后可能有多个结果,对应的等价类也可能有多种结果。

幸运的是,+的运算结果是唯一的(这是Z/~能走入密码学的基础),请见下面

定理:+是Z/~上的代数运算
证明:设A、B是等价类,i、j是A的代表元素,s、t是B的代表元素,故i~j,s~t,根据~的定义,i-j=k*n,s-t=l*n(其中k、l∈Z,n是模--还记得吗,~必须与某一个自然数n相关联),两式相加,得(i+s)-(j+t)=(k+l)*n,这正是[i]+[s]=[j]+[t]

定理:对于元素A,B,C∈Z/~,有(A+B)+C=A+(B+C)--左边等号表示A先加B,得到的结果再加C
证明:设A=[i],B=[j],C=[k],则
 (A+B)+C
=([i]+[j])+[k]
=[i+j]+[k]
=[i+j+k]
=[i]+[j+k]
=[i]+([j]+[k])
=A+(B+C)
说明:上述情况下,称“运算+是可结合的”,或“+满足结合律”。

定理:[0]是Z/~中的特殊元素,满足:[0]+[i]=[i]+[0]=[i],其中i为Z/~中任意等价类的代表元素
证明:[0]+[i]=[0+i]=[i]=[i+0]=[i]+[0]

定理:对于任意元素A∈Z/~,都存在一个元素B∈Z/~,满足:A+B=[0]=B+A
证明:设A=[i],很明显只要取B=[-i]就能够满足:A+B=[i+(-i)]=[0]=[(-i)+i]+B+A

[群]:对于集合G,给定G上的一个运算法则+,满足下列四个条件,则称(G,+)或G为一个群
1、G对运算+是封闭的,即对任意元素a、b∈G,有唯一确定的元素c∈G,满足c=a+b
2、G对运算+是可结合的,即对任意a、b、c∈G,满足a+(b+c)=(a+b)+c
3、G中有一元素e,对任意a∈G,满足a+e=e+a=a
4、对于任意a∈G,都有一个b∈G,满足a+b=b+a=e
说明:
1、条件3中的e称为单位元或恒等元,条件4中的b称为a的可逆元(或逆元),有时记为a-1
2、条件4成立的前提,是条件3中的单位元存在
3、单位元是相对具体运算而言,如果G中存在另外一个代数运算_,则“对于任意a,a_e=e_a=e”可能不成立,即e可以不是运算_的单位元。
4、再次强调,+只是运算法则的一个记号,我们完全可以用+、-、*来代替

根据上面的四个定理,Z/~对于运算+构成一个群。我们说,(Z/~,+)是一个群。或者在不引起混淆的情况下,省去+称Z/~是一个群。

此外,对于Z/~,运算+还满足另一个性质:对于任意A、B∈Z/~,A+B=B+A
证明:设A=[i],B=[j],则A+B=[i]+[j]=[i+j]=[j+i]=[j]+[i]=B+A
说明:上述情况下,称运算+是可交换的,或+满足交换律。称Z/~(相对运算+)是交换群,有时候又称为可换群。

Z/~作为一个群,其元素个数是有限的,故称为有限群。

说明:对于群Z/~,为了突出它与模n的关系,我们常简记为Zn。后面将一直使用这个记号,请注意。

转载于:https://www.cnblogs.com/efzju/archive/2011/08/02/2125618.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle.ManagedDataAccess 连接数据库用户名密码错误

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] “Enabled” dword:00000000 转载于:https://www.cnblogs.com/Elcser/p/11134100.html

IE9下apply的使用方式

起初看到这段代码的时候先不管在干啥,仅仅是尝试理解就发现很绕,现记下以便回顾。 Function.prototype.apply.call(console.error, console, args);其实主要做的事情就是console.error(array),使用数组作为参数调用console.error。 分解&am…

不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会

越来越多的人通过为他们的业务采用功能性编程来赶上我们平台的最新更新。 在Data Geekery ,我们将Java 8用于jOOQ集成测试,因为将新的Streams API与lambda表达式一起使用使生成临时测试数据变得非常容易。 但是, 我们并不认为JDK提供了尽可…

Redis---概述

1.概述 Redis是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串,列表,集合,散列表&#xf…

AJAX Control Toolkit——DropShadow(阴影和圆角框)

该控件的效果就是可以使相应的Panel产生阴影和圆角框的效果,要说的是该控件在CSS3来临之际并不存在多大的意义了,因为在CSS3中同样可以实现而且更加理想的效果。 但是要说明的是不要为目标Panel添加过多的CSS属性,不然会出现预料之外的效果&a…

node实现简单的群体聊天工具

一、使用的node模块 1、express当做服务器 2、socket.io 前后通信的桥梁 3、opn默认打开浏览器的模块(本质上用不到) 难点:前后通信 源码地址:https://github.com/wjf444128852/SimpleChat 欢迎clone并运行、扩展改进、issues 二、基础样子&#…

CSS中的三种样式来源:创作人员、读者和用户代理

查看原文:https://www.cnblogs.com/JJJJJKKKKK/articles/4542545.html CSS中的样式一共有三种来源:创作人员、读者和用户代理,来源的不同会影响到样式的层叠方式,很多第一次学习CSS的朋友,对这三种来源可能会存在一些…

具有jOOQ和Java 8的CompletableFuture的异步SQL执行

响应式编程是一个新的流行词,它实际上仅表示异步编程或消息传递。 事实是,函数语法极大地帮助构建了异步执行链,今天,我们将看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到这一点。 实际上,事情很简单&…

关于模板引擎handlebars.js基本用法

说明:模板引擎主要针对于渲染DOM,取代了字符串拼接,用下面的代码亲测handlebars模板引擎比字符串拼接渲染DOM慢了20ms, 这里配置一个在线DEMO,简单说明下handlebars.js的基本用法,需要根据获取的数据去渲染…

create react app创建的项目运行test的时候不能解析webpack的alisa配置的问题

使用babel插件npm install babel-plugin-module-resolver,并在.babelrc文件中加入如下: {"plugins": [["module-resolver",{"alias": {"": "./src"}}]] }详情查看babel-plugin-module-resolver插件文…

使用Spring Security的多租户应用程序的无状态会话

从前, 我发表了一篇文章,解释了构建无状态会话的原理 。 巧合的是,我们再次针对多租户应用程序执行同一任务。 这次,我们将解决方案集成到Spring Security框架中,而不是自己构建身份验证机制。 本文将解释我们的方法和…

C# 退出提示 事件提示两次问题

private void frmCtiState_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason CloseReason.ApplicationExitCall) return; DialogResult result MessageBox.Show("是否退出系统?", "消息", MessageBoxB…

What?一个 Dubbo 服务启动要两个小时!

前言 前几天在测试环境碰到一个非常奇怪的与 dubbo 相关的问题,事后我在网上搜索了一圈并没有发现类似的帖子或文章,于是便有了这篇。 希望对还未碰到或正在碰到的朋友有所帮助。 现象 现象是这样的,有一天测试在测试环境重新部署一个 dubbo …

React hook 中的数据获取

相关说明: 对于hook相关词不翻译,感觉翻译后怪怪的。 effect hook 效果钩子,用于执行一些副作用例如获取数据 。 state hook 状态钩子。 使用----------- 和 ----------- 标出代码需要关注的地方。 渣翻译如下: 在这个指南中…

嵌入式Jetty和Apache CXF:借助Spring Security来保护REST服务

最近,我遇到了一个非常有趣的问题,我认为这只花了我几分钟就解决了:在Windows Server 2003中使用Spring Security (当前稳定版本3.2.5 )保护Apache CXF (当前版本3.0.1 )/ JAX-RS REST服务。在嵌…

我所知道的前端组件化与模块化

序言:组件化?模块化?这都是什么鬼?这是最初看到这2个新名词的反应。随着时间的推移,似乎、可能、大概明白了一点,于是想说说自己的理解(仅仅是自己的理解) 一、组件化 忘记什么时候看到这个词的了&#x…

关于通过反汇编查看dll的方法【转】(

关于通过反汇编查看dll的方法【转】( http://blog.sina.com.cn/s/blog_51a3c0380100f9md.html 今天想看一个dll的内容,苦于没有相关工具,从csdn上找到有这么段文字,收益匪浅啊,收藏! 可以通过反汇编来知道接口函数的参…

openocd安装与调试

环境&#xff1a; 硬件&#xff1a;PC机<------>ARM仿真器v8.00<------>已下载好bit流的Xinlinx SoC开发板&#xff08;其上有arm cortex-a9核&#xff09; 软件&#xff1a;Redhat Linux6&#xff08;或虚拟机&#xff09; openocd 使用openocd下载程序&#xff…

在React中获取数据

React初学者经常从不需要获取数据的应用开始。他们经常面临一个计数器&#xff0c;任务列表获取井字棋游戏应用。这是很好的&#xff0c;因为在开始学习React的时候&#xff0c;数据获取在你的应用中添加了另一层复杂度。 然而&#xff0c;有些时候你想要从自己的或者第三方AP…

使用Project Lombok减少Java应用程序中的样板代码

对Java编程语言最常提出的批评之一是它需要大量的样板代码 。 对于简单的类尤其如此&#xff0c;该类只需要存储一些值就可以。 您需要这些值的getter和setter&#xff0c;也许您还需要一个构造函数&#xff0c;覆盖equals&#xff08;&#xff09;和 hashcode&#xff08;&am…