精华内容
下载资源
问答
  • 发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。 把对象转化为字节序列过程称为对象序列化 把字节序列恢复为对象过程称为对象反序列化 为什么序列化? 序列化...

    转自——从网络上查的

    序列化
    将对象的状态信息转化为可以存储或者传输的形式过程。在序列化期间,对象将其状态写入到临时或者持久性存储区。以后,可以通过从存储区读取或反序列化对象的状态,重新创建该对象。
    当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。

    把对象转化为字节序列的过程称为对象的序列化

    把字节序列恢复为对象过程称为对象的反序列化

    为什么要序列化?
    序列化的目的就是为了跨进程传递格式化数据。

    实现序列化的步骤

    将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable
    只是为了标注该对象是可被序列化的。然后使用一个输出流(如:FileOutputStream)来构造一个
    ObjectOutputStream(对象流)对象。接着,使用ObjectOutputStream对象的writeObject(Object obj)方法
    就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
    在序列化的过程中,有些数据字段我们不想将其序列化,对于此类字段我们只需要在定义
    时给它加上transient关键字即可,对于transient字段序列化机制会跳过不会将其写入文件,当然
    也不可被恢复。但有时我们想将某一字段序列化,但它在SDK中的定义却是不可序列化的类型,
    这样的话我们也必须把他标注为transient,可是不能写入又怎么恢复呢?好在序列化机制为包含
    这种特殊问题的类提供了如下的方法定义:
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
    private void writeObject(ObjectOutputStream out) throws IOException;

    序列化机制的解决方案:
    1.保存到磁盘的所有对象都获得一个序列号(1, 2, 3等等)
    2.当要保存一个对象时,先检查该对象是否被保存了。
    3.如果以前保存过,只需写入"与已经保存的具有序列号x的对象相同"的标记,否则,保存该对象
    通过以上的步骤序列化机制解决了对象引用的问题!

    展开全文
  • 在网络中传输数据,往往信息安全是首先考虑的问题。一般来说,重要的信息在网络中传播都需要加密,接收方拿到信息之后需要解密。...由于其速度快,对称性加密通常在消息发送方需要加密大量数据

    想要在网络中传输数据,往往信息安全是首先要考虑的问题。一般来说,重要的信息在网络中传播都需要加密,接收方拿到信息之后需要解密。
    加密/解密算法大致可以分为对称加密和非对称加密两类:

    对称加密

    定义

    采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

    需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。

    所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
    因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

    工作流程


    举个例子来简要说明一下对称加密的工作过程。甲和乙是一对生意搭档,他们住在不同的城市。由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定制作一个保险盒,将物品放入其中。他们打造了两把相同的钥匙分别保管,以便在收到包裹时用这个钥匙打开保险盒,以及在邮寄货物前用这把钥匙锁上保险盒。
    上面是一个将重要资源安全传递到目的地的传统方式,只要甲乙小心保管好钥匙,那么就算有人得到保险盒,也无法打开。

    这个思想被用到了现代计算机通信的信息加密中。在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。

    常用算法

    在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。

    优缺点

    • 优点:算法公开、计算量小、加密速度快、加密效率高。
    • 缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

    非对称加密

    定义

    非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

    工作流程

    如下图所示,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。

    1. 乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
    2. 得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
    3. 乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
      在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。
      同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

    常用算法

    在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。

    优缺点

    • 优点:其安全性更好,非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。
    • 缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
    展开全文
  • 在实现认证过程中发送方将hash码附于要发送的报文之后发送给接收方,接收方通过重新计算hash码来认证报文。Hash函数可提供保密性、报文认证以及数字签名功能。 Hash函数的特性: 单向性:对任何给定的散列码h,找到...

    第三章 3.4Hash函数

    Hash函数

    Hash函数又称为哈希函数,散列函数
    Hash函数将任意长的报文M映射为定长的hash码h,其形为:

    h=H(M)

    hash码也称报文摘要,它是所有报文位的函数。它具有错误检测能力,即改变报文的任何一位或多位,都会导致hash码的改变。

    在实现认证过程中发送方将hash码附于要发送的报文之后发送给接收方,接收方通过重新计算hash码来认证报文。Hash函数可提供保密性、报文认证以及数字签名功能。

    Hash函数的特性

    单向性:对任何给定的散列码h,找到满足H(x)=h的x在计算上是不可行的。
    抗弱碰撞性:对任何给定的消息x,找到满足y≠x且H(x)=H(y)的y在计算上是不可行的。
    抗强碰撞性:找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的。

    MD5

    MD5算法由MD2、MD3、MD4发展而来,其消息长度为512比特,生成128比特的摘要

    SHA-1算法

    SHA-1算法的输入是长度小于2^64^比特的任意消息,输出160比特的摘要

    DSS数字签名标准的核心是数字签名算法DSA,该签名算法中杂凑函数采用SHA-1

    SHA-1的算法步骤

    • 填充报文
    • 初始化缓冲;初始化5个32比特的寄存器
    • 循环生成摘要,每次循环处理512位的分组
    • 输出结果

    SM3算法

    SM3算法也是一种哈希算法,中国国家密码管理局在2010年发布,其名称是SM3密码杂凑算法

    SM3的消息分组长度为512,摘要长度为256,杂凑值长度为32字节

    1、算法的本质
    给数据加一个固定长度的指纹,这个固定长度就是256比特。
    2、处理过程
    第一步:填充,使填充后的数据的长度是512的整数倍
    先在数据的最尾巴上加一个1;然后把原始数据的长度用64比特表示,放在最后面;再看看现在的数据的长度值离512的整数还差多少个,差多少个就填多少个0在加的这个1和64比特的长度之间。
    第二步:分组
    把填充后的信息按照512比特一个分组进行分组,如果分成了N组,就是b(0),b(1),b(N-1)
    第三步:迭代压缩得到最后的杂凑值(哈希值)
    IV(n)=CF(IV(n-1),b(n-1))
    如果信息分为N组,那么IV(N)就是最后得到的杂凑值。

    HMAC

    图2-34给出了HMAC的总体结构。定义下列符号:

    • H=嵌入的hash 函数(如MD5,SHA-1等算法)

    • IV=作为hash函数输入的初始值

    • M=HMAC的消息输入(包括由嵌入hash函数定义的填充位)

    • Yi=M的第i个分组,0≤i≤(L-1)

    • L=M中的分组数

    • b=每一分组所含的位数

    • n= 嵌入的hash 函数所产生的hash码长

    • K= 密钥,建议密钥长度≥n;若密钥长度大于b,则将密钥作为hash函数的输入,来产生一个n位的密钥

    • K+=在K左边填充0后形成标准块,所得的b位结果

    • ipad=00110110(十六进制数36) 重复b/8次的结果

    • opad=01011100(十六进制数5C) 重复b/8次的结果

    • HMAC可描述如下:

    HMACK=H[(K+⊕opad)||H[(K+⊕ipad)||M]]

    也就是说,

    (1)在K左边填充0,得到b位的K+(例如,若K是160位,b=512,则在K中加入44个字节的0*00);

    (2)K+与ipad执行异或运算(位异或)产生b位的分组Si;

    (3)将M附于Si后;

    (4)将H作用于步骤3所得出的结果;

    (5)K+与opad执行异或运算(位异或)产生b 位的分组S0;

    (6)将步骤4中的hash码附于S0后;

    (7)将H作用于步骤6所得出的结果,并输出该函数值。

    注意:K与ipad异或后,其信息位有-半发生了变化;同样,K与opad异或后,其信息位的另一半也发生了变化,这样,通过将Si与S0传给hash算法中的压缩函数,我们可以从K伪随机地产生出两个密钥。

    HMAC多执行了三次hash压缩函数(对Si、S0和内部的hash产生的分组),但是对于长消息, HMAC和嵌入的hash函数的执行时间应该大致相同。

    实现HMAC有更为有效的方法,如图2-34所示。我们可以预计算两个值:

    f(IV,(K+⊕ipad))

    f(IV,(K+⊕opad))

    其中j(cv,block)是hash函数的压缩函数,其输入是n位的链接变量cv和b位的分组block,输出是n位的链接变量。上述这些值只在初始化或密钥改变时才需计算,实际上,这些预先计算的值取代了hash函数中的初值(IV)。这样,只多执行了一次压缩函数,在大多数产生MAC的消息都较短的情况下,这种实现特别有意义。

    在这里插入图片描述

    展开全文
  • 处理断点续传算法

    2020-06-04 11:02:55
    需求分析 《多文件云传输》项目中有这样一个应用背景:...我们把接下来发送未发送的片段这个操作称为断点续传。那么如果我们进行断点续传,首先,我们统计出是哪个片段的确实。 接下来这个算法就是用来统计未发送的

    需求分析

    《多文件云传输》项目中有这样一个应用背景:

    文件的发送是按照已定的规则被拆分成好几个片段,每一个片段包括文件的编号和这个片段首字节在整个文件中的偏移和这个片段的长度。提供这三个信息,是为了接受时能根据这些信息,把片段再写回成一整个文件。
    但是文件的发送并不是每次都能够成功,可能某一个发送方在发送时,突然掉线,那么接受时,某个文件可能就会缺少一个片段。我们把接下来发送未发送的片段这个操作称为断点续传。那么如果我们要进行断点续传,首先,我们要统计出是哪个片段的确实。
    接下来这个算法就是用来统计未发送的片段

    举例

    假设一个文件长度为20:下面的数字分别表示未接受的各个字节
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 写成0:20,0是偏移,20是长度

    第一次接收到片段5:4,把原有片段分成俩个片段: 未接受片段 0:5,9:11
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    第二次接收到片段12:4。 未接受片段0:5,9:3,16:4
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    第三次接收到片段9:3 未接受片段0:5,16:4
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    接收完毕,则未接受的片段就是0:5,16:4。
    那么我们是如何来计算出未接受的片段的?

    1. 假设我们把0:20表示成 curOff :curLen,第一次接收到的表示成recOff:recLen
      即curOff:curLen = 0:20;recOff:recLen = 5:4
      左片段被表示为:curOff:recOff-curOff -> 0:5
      右片段为:recOff + recLen:curOff+curLen-recOff -> 9:11
      计算出这俩个片段之后,顺序的放在一个链表中存储。

    2. 当进行到第二次接收时,发现原有的片段已经有俩个了,那么我们刚才的算法还怎么用呢?
      首先我们要在原记录的片段中找到合适的片段当做当前片段。第二次接收的片段12:4,这个片段在9:11片段范围内,所以我们就把9:11当做当前片段,继续第一部的算法。
      curOff:curLen = 9:11
      recOff:recOff = 12:4
      原来的9:11变成俩个片段:9:3,16:4,把这俩个片段一次放入到链表。
      现在的链表存放:0:5,9:3,16:4

    3. 当第三次时,又出现了了特殊的情况,得到片段9:3,计算得出应该在原来9:3这个范围。
      根据原有的算法得出,左片段9:0,右片段12:0,这俩个片段长度都是0,所以不能被加到链表中去。应该直接剔除。到这里,我们的算法分析完毕。可以考虑写出代码。

    代码

    public void receiveSection(long offset, int len)
                throws ReceiveSectionOutOfRangeException {
            int index = searchSection(offset);
            SectionInfo curSection = sectionList.get(index);
    
            long curOff = curSection.getOffset();
            long curLen = curSection.getLen();
            long recOff = offset;
            long recLen = len;
    
            long lOff = curOff;
            long lLen = recOff - curOff;
            long rOff = recOff + recLen;
            long rLen = curOff + curLen - rOff;
    
            sectionList.remove(index);
            if (rLen > 0) {
                sectionList.add(index, new SectionInfo(rOff, rLen));
            }
            if (lLen > 0) {
                sectionList.add(index, new SectionInfo(lOff, lLen));
            }
        }
    
        private int searchSection(long offset) throws ReceiveSectionOutOfRangeException {
            for (int i = 0; i < sectionList.size(); i++) {
                if(sectionList.get(i).inRange(offset)){
                    return i;
                }
            }
            throw new ReceiveSectionOutOfRangeException("文件编号:"+fileNo+" 偏移量:"+offset);
        }
    

    运用这个代码,会大大减少空间的浪费,降低时间复杂度。如果用数组来标记已经接受的字节,那么就很浪费许多的内存空间。

    展开全文
  • 数据通信基础知识

    2021-02-17 10:16:01
    一个数据通信系统可划分为三大部分,即源系统(或发送端、发送方)、传输系统(或传输网络)和目的系统(或接收端、接收方) 源系统一般包括:源点和发送器 源点设备产生传输数据(例如从键盘输入字母)源点又...
  • Tcp可靠性和网络优化

    千次阅读 2017-09-20 21:56:50
    发送方每次发送一个报文段后,接收方必须回复给发送方已经收到确认信息。 出现差错时候,如果发送放发送了一个报文后,在一段时间内还没收到确认返回,这时候就要重新发送刚才报文,称为超时重传。(发送方的...
  • 无线播将能量从发送方传送给远方的接收者,要发送的数据信号经过调制叠加到无线载波信号中,调制后的电波占据一定频率带宽。在典型的无线lan网的配置中,发送/接收设备被称为登陆点,用标准网线连接到局域网中。简单...
  • 1、流量控制涉及对链路上的帧的发送速率控制,使接受方有足够的缓冲空间来接收每一帧。常见的方式有两种:停止等待协议和滑动...在任意时刻,发送方都维持一组连续的允许发送的帧的序号,称为发送窗口;同时接收方也
  • 证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。 有甲和乙两,甲是证明者,乙是验证者。甲方先发送满足条件的随机值给乙方,这个称为承诺。乙方发送...
  • 一、心跳机制简介在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从...因为是每隔固定时间发送一次,类似心跳,所以发送的固定信息称为心跳包。心跳包一般为比较小的包,可根...
  • 一般来说,大型应用会把授权逻辑与用户信息的相关逻辑独立成一个应用,称为用户中心 用户中心不处理业务逻辑,只是处理用户信息的管理以及授权给第三应用。第三应用需要登录时候,则把用户登录请求转发给...
  • 5.1.3同步通信和异步通信 一、同步通信和异步通信 串行通信可以分为两种类型,一种叫同步通信,另一种叫异步通信。...同步方式下,发送方除了发送数据,还要传输同步时钟信号,信息传输双方用同一个时钟信...
  • 数据报网络

    千次阅读 2020-06-29 11:39:17
    握手提醒发送方发送数据分组前,彼此通过发送控制分组进行握手,握手过程结束,两个端系统之间会创建连接,可以不再收发数据分组,数据传输完成后拆除这种连接,也就是所谓挥手。 2:面向无连接服务: 直接发送...
  • 爬虫介绍

    2020-01-03 14:14:55
    网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照一定规则,自动地抓取互联网信息的程序。 只要是浏览器能做事情,原则上,爬虫都能够做 为什么学习爬虫? 因为...
  • 网络基础概念网络:把...如同语言一样,如果想让不同地区电脑都能互相发送数据并且互相接收并能识别出来就需要一个标准,为了使数据在网络上从源到达目的,网络通信参与必须遵循相同规则,这套规则称为协议...
  • WebRTC实践信令服务

    2020-08-20 18:05:13
    在实际应用过程中各终端之间创建并保持WebRTC通话, 需要互相交换元数据信息, 这个过程被称为信令传输(signaling)。 具体内容包括: • Offer视频邀请函描述信息 • Answer视频邀请响应信息 • Candidate视频终端ICE...
  • 该通道可以将这种能量从一种形式转换成另一种形式,例如电信号转换成光学信号,同时保持信息的完整性,以便接收方能够理解发送方发送的消息。 为了使通信成功,源和目的地必须使用相互同意的传输数据的方法。 ...
  • UDP组播概述

    2019-06-28 20:31:53
    为了减少在广播中涉及不必要的开销,可以只向特定一部分接收方发送信息,这被称为组播(又称为多播)。当发送组播数据包时,只有加入指定多播组主机数据链路层才会处理,其他主机在数据链路层会直接丢掉收到...
  • 同步通信和异步通信

    千次阅读 2019-05-30 16:48:06
    一、同步通信和异步通信 串行通信可以分为两种类型,一种叫同步通信,另一种叫异步通信。...同步方式下,发送方除了发送数据,还要传输同步时钟信号,信息传输双方用同一个时钟信号确定传输过程中每1位位置...
  • java 抽象_Java抽象

    2021-03-05 14:25:11
    从具体事物抽出、概括出它们共同方面、... 因此,要发送电子邮件,只需输入内容,提及接收方的地址,然后单击“发送”。同样在面向对象编程中,抽象是从用户隐藏实现细节过程,只有功能将被提供给用户。 换句...
  • Java实现心跳机制

    2019-10-09 17:57:59
    一、心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效。...因为是每隔固定时间发送一次,类似心跳,所以发送的固定信息称为心跳包。...
  • JAVA实现心跳机制

    千次阅读 2019-07-15 16:32:21
    1.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效。...因为是每隔固定时间发送一次,类似心跳,所以发送的固定信息称为心跳包。心跳...
  • TCP滑动窗口机制及演示

    千次阅读 2010-09-03 11:46:00
    TCP协议在能够发送数据之前就建立起了“连接”。...接下来,连接发起方为了表示收到了这个SYN+ACK信息,会向发送方发送一个最终确认信息(ACK 包)。这种SYN、SYN+ACK、ACK步骤被称为TCP连接建立时“三
  • 物理层 物理层基本概念 ...源系统(发送方) 传输系统(传输网络) 目的系统(接收方) 有关信道几个基本概念 信道 一般表示某一方向传送信息的媒体 从信道双方信息叫虎方式来看可分为
  • Syslog格式说明

    2011-02-11 13:38:00
    不管管理员决定怎样配置对事件信息的处理,把这些信息发送到syslog接受者的过程一般都由下面部分构成:决定哪个帮助信息要被发送,发送的级别,定义远程的接受者。 被传输的syslog信息的格式主要有3个容易识别...
  • TCP/IP协议

    2016-02-15 14:48:10
    TCP是面向连接通信协议...TCP还采用一种称为“滑动窗口”方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。 UDP是面向无连接通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不
  • 向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址, 而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。 1.8.4 对象的引用 对象的使用包括引用对象的成员变量和方法,...

空空如也

空空如也

1 2 3 4 5 6
收藏数 108
精华内容 43
关键字:

发送方要发送的信息称为