精华内容
下载资源
问答
  • 本发明涉及网络数据处理技术领域,具体地说是一种可快速定位问题所在的TCP报文加密电路及方法。背景技术:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,...

    本发明涉及网络数据处理技术领域,具体地说是一种可快速定位问题所在的TCP报文加密电路及方法。

    背景技术:

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,完成第四层传输层所指定的功能。TCP把数据流分区成适当长度的报文段,为了保证不发生丢包,采用赋予序号方式,接收端实体对已成功收到的包发回一个相应的确认(ACK);或者如果发送端实体在合理的往返时延内未收到确认,对应的数据包会被进行重传。

    TCP报文中除了包含有效载荷的分片数据包外,还包含大量的用于控制流程或握手的功能性报文。在TCP加密传输系统中,往往对二者不作区分,采用同一算法进行加解密操作,此种方法可能为功能性报文消耗大量算法开销,导致加解密效率不高,且整个系统灵活性欠佳,对解密端速率要求较高。基于此,需要一种能够克服所述问题、提高加解密效率的TCP报文加密电路及方法。

    技术实现要素:

    本发明的技术任务是针对以上不足之处,提供一种TCP报文加密电路及方法。

    一种TCP报文加密电路,包括:

    报文解析模块,用于接收网络报文数据按TCP报文格式进行解析,解析后的数据发送到接收缓存模块中;

    接收缓存模块,将接收到的数据缓存并发送至加密模块中;

    加密模块,对接收缓存模块发送来的数据进行加密,然后发送到发送缓存模块中;

    发送缓存模块,对经加密模块传来的数据进行缓存,并重新按TCP报文数据格式进行组包并发送;

    逻辑控制模块,完成对上述报文解析模块、接收缓存模块、加密模块和发送缓存模块的控制。

    所述报文解析模块在逻辑控制模块控制下将网络报文数据按TCP报文格式进行解析,得到报文TCP首部信息及载荷内容,并存入所述接收缓存模块。

    所述接收缓存模块将解析后的TCP报文数据进行缓存,在所述逻辑控制模块控制下将缓存数据发送至加密模块,该控制发送的具体过程为:逻辑控制模块根据解析后的TCP首部信息,将TCP报文数据从接收缓存模块读出,并由该接收缓存模块将缓存的网络报文数据送入加密模块中。

    所述报文解析模块解析网络报文数据时,按每个数据8比特大小存入接收缓存模块中,相对应的,接收缓存模块按8比特大小将解析后的TCP报文数据进行缓存。

    所述加密模块设置有两组,分别为加密一模块、加密二模块,加密一模块、加密二模块均采用用户自定义且不相同的加密算法进行报文加密,加密一模块用于对TCP功能性的控制报文进行加密,加密二模块用于对带有有效载荷的TCP数据报文进行加密。

    所述加密一模块、加密二模块采用AES等对称加密算法、RSA等非对称加密算法或用户收发双方自协商的加密算法。

    接收缓存模块将缓存数据发送到加密一模块或加密二模块的具体过程为:逻辑控制模块查看接收缓存模块中接收的TCP报文数据首部,若首部Flag标志字段中SYN同步比特位、或ACK确认比特位、或FIN终止比特位为‘1’,或首部Option字段不为空时,表明此TCP报文为用于包括连接或终止功能的功能性控制报文,该接收缓存模块发送并使用所述加密一模块进行加密;否则,表明此报文数据为带有有效载荷的TCP数据报文,该接收缓存模块发送并使用所述加密二模块进行加密。

    一种TCP报文加密方法,基于上述加密电路,其实现过程为:

    首先对网络报文数据按TCP报文格式进行解析并缓存;

    读取解析后的报文首部字段信息,确定该报文为TCP功能性的控制报文,还是带有有效载荷的TCP数据报文;

    当报文为TCP功能性的控制报文时,通过加密一模块进行加密;

    当报文为带有有效载荷的TCP数据报文时,通过加密二模块进行加密。

    所述报文首部字段信息是指报文首部中Flag标志字段或Option选项字段信息。

    所述TCP功能性的控制报文是指用于包括连接或终止功能的报文,具体指报文数据首部的Flag标志字段中SYN同步比特位或ACK确认比特位或FIN终止比特位为‘1’,或首部Option字段不为空;否则此报文数据为带有有效载荷的TCP数据报文。

    本发明的一种TCP报文加密电路及方法和现有技术相比,具有以下有益效果:

    本发明的一种TCP报文加密电路及方法,通过报文逻辑分析并分流,将不携带TCP有效载荷的功能性报文和其他TCP分片报文分离,分别进行不同复杂度不同密级的加密运算,可在保证当前TCP报文加密有效性的同时,提高加密效率,多种加密算法的整合可提升系统的灵活性和安全性,对TCP报文的安全准确传输提供保障,同时可为解密端速率要求留出阈量,实用性强,适用范围广泛,易于推广。

    附图说明

    附图1是本发明具体实施方式的实现示意图。

    具体实施方式

    为了使本技术领域的人员更好地理解本发明的方案,下面结合具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

    如附图1所示,一种TCP报文加密电路,所述电路包括报文解析模块,接收缓存模块,逻辑控制模块,加密一模块,加密二模块,发送缓存模块。

    其中:

    报文解析模块,用于接收网络报文数据按TCP报文格式进行解析,解析后的数据发送到接收缓存模块中;

    接收缓存模块,将接收到的数据缓存并发送至加密模块中;

    加密模块,对接收缓存模块发送来的数据进行加密,然后发送到发送缓存模块中;

    发送缓存模块,对经加密模块传来的数据进行缓存,并重新按TCP报文数据格式进行组包并发送;

    逻辑控制模块,完成对上述报文解析模块、接收缓存模块、加密模块和发送缓存模块的控制。

    所述报文解析模块在逻辑控制模块控制下将网络报文数据按TCP报文格式进行解析,得到报文TCP首部信息及载荷内容,并存入所述接收缓存模块。

    所述接收缓存模块将解析后的TCP报文数据进行缓存,在所述逻辑控制模块控制下将缓存数据发送至加密模块,该控制发送的具体过程为:逻辑控制模块根据解析后的TCP首部信息,将TCP报文数据从接收缓存模块读出,并由该接收缓存模块将缓存的网络报文数据送入加密模块中。

    所述报文解析模块解析网络报文数据时,按每个数据8比特大小存入接收缓存模块中,相对应的,接收缓存模块按8比特大小将解析后的TCP报文数据进行缓存。

    所述加密模块设置有两组,分别为加密一模块、加密二模块,加密一模块、加密二模块均采用用户自定义且不相同的加密算法进行报文加密,所述加密一模块用于采用某种用户自定义加密算法对TCP功能性的控制报文进行加密,如ACK报文,SYN报文,带有选项字段的TCP控制报文等;所述加密二模块用于采用某种用户自定义加密算法对带有有效载荷的TCP数据报文进行加密。

    所述加密一模块、加密二模块采用AES等对称加密算法、RSA等非对称加密算法或用户收发双方自协商的加密算法。

    接收缓存模块将缓存数据发送到加密一模块或加密二模块的具体过程为:逻辑控制模块查看接收缓存模块中接收的TCP报文数据首部,若首部Flag标志字段中SYN同步比特位、或ACK确认比特位、或FIN终止比特位为‘1’,或首部Option字段不为空时,表明此TCP报文为用于包括连接或终止功能的功能性控制报文,该接收缓存模块发送并使用所述加密一模块进行加密;否则,表明此报文数据为带有有效载荷的TCP数据报文,该接收缓存模块发送并使用所述加密二模块进行加密。

    一种TCP报文加密方法,基于上述加密电路,其实现过程为:

    首先对网络报文数据按TCP报文格式进行解析并缓存;

    读取解析后的报文首部字段信息,确定该报文为TCP功能性的控制报文,还是带有有效载荷的TCP数据报文;

    当报文为TCP功能性的控制报文时,通过加密一模块进行加密;

    当报文为带有有效载荷的TCP数据报文时,通过加密二模块进行加密。

    所述报文首部字段信息是指报文首部中Flag标志字段或Option选项字段信息。

    所述TCP功能性的控制报文是指用于包括连接或终止功能的报文,具体指报文数据首部的Flag标志字段中SYN同步比特位或ACK确认比特位或FIN终止比特位为‘1’,或首部Option字段不为空;否则此报文数据为带有有效载荷的TCP数据报文。

    通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的具体实施方式。在公开的实施方式的基础上,所述技术领域的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。

    除说明书所述的技术特征外,均为本专业技术人员的已知技术。

    展开全文
  • http报文加密解决方案

    万次阅读 2018-06-18 19:42:17
    (服务器或客户端)一般的用MD5报文体(即参数)加密生成一段摘要(字符串、比报文体短得多),然后用RSA进行加密,这里必须设定一个规则,比如报文体(参数)进行组合排列。 服务器端验证:客户端报问体先...

    (服务器或客户端)一般的用MD5对报文体(即参数)加密生成一段摘要(字符串、比报文体短得多),然后用RSA进行加密,这里必须设定一个规则,比如对报文体(参数)进行组合排列。

    1. 服务器端验证:客户端对报问体先进行MD5加密,生成一段字符串A,然后对字符串A进行RSA加密再生成字符串B,把字符串B加入到header然后对服务器发送请求。服务器接收到请求,对请求体(参数)也进行MD5 RSA加密生成字符串C。服务器对字符串C和B进行对比。如果相同,则是认为是客户端正常请求,如果不同:则认为有人恶意请求,不予回复。
    2. 客户端验证:对header里某几个公共参数(或是重要的返回数据进行加密,自定义规则,打乱顺序,)进行 MD5加密生成字符串A RSA加密生成字符串B,回复给客户端,客户端拿到字符串B,自己对header里的某几个公共参数MD5 RSA加密生成字符串C。判断B与C是否相同。相同即认为是服务器返回的报文,不相同即认为有人恶意修改数据。

    更高级别的安全加密:公私钥加密
    通过Linux open SSL 工具 在Linux服务器生成两对公钥和私钥,客户端、服务端各一对。客户端通过私钥对报文体加密得到字符A,服务端使用公钥对字符串A解密(使用JAVA API传入字符串A报文,公钥,报问题),会返给true false。 反之,服务器用私钥加密,客户端用公钥解密。

    展开全文
  • RSA实现对报文数据加密

    千次阅读 2017-12-06 17:09:17
    // 数据加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte [] code = new byte [(((data.length - 1 ) / 117 + 1 )) * 128 ...
     public static String pempublicEncrypt(String str,String public_key){
    
        try {
            RSAEncrypt rsaEncrypt = new RSAEncrypt();
            rsaEncrypt.loadPublicKey(public_key);
            byte[] PrivateMessage=encryptByPublicKey(str.getBytes("UTF-8"),rsaEncrypt.getPublicKey());
                sun.misc.BASE64Encoder ea = new sun.misc.BASE64Encoder();               
                 String Public =ea.encode(PrivateMessage);
    
                return Public;
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
    
    
        return null;
    
    
    
    
    
    
     public static byte[] encryptByPublicKey(byte[] data, PublicKey publicKey)
                throws Exception {
            // 对公钥解密
            // byte[] keyBytes = decryptBASE64(key);      
            // 取得公钥
            // X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);      
            // Key publicKey = keyFactory.generatePublic(x509KeySpec);      
            KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
    
            // 对数据加密
            Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] code = new byte[(((data.length - 1) / 117 + 1)) * 128];
            int ixplain = 0;
            int ixcode = 0;
            while ((data.length - ixplain) > 117) {//截117字节做一次加密
                ixcode += cipher.doFinal(data, ixplain, 117, code, ixcode);
                ixplain += 117;
            }
            cipher.doFinal(data, ixplain, data.length - ixplain, code, ixcode);
            return code;
        }

    **如有更好的建议 , 请与我联系

    本人邮箱 : kevinddw@126.com**



    展开全文
  • 使用WSE实现SOAP报文进行加密

    千次阅读 2006-06-01 09:03:00
    讲述了SOAP报文加密是如何进行,在WS安全和XML加密规范中又是如何定义的。目录:? 介绍WSE? WSE的安全特性? 加密SOAP报文? WSE加密的支持? 配置WSE? SOAP报文的对称加密算法? 使用X.509证书来加密SOAP报文? 选
    摘要:
    如何使用支持WS安全规范的WSE(Microsoft Web Services Enhancements)使加密SOAP能够跨越标准HTTP呢?讲述了SOAP报文加密是如何进行,在WS安全和XML加密规范中又是如何定义的。
    目录:
    ? 介绍WSE
    ? WSE的安全特性
    ? 加密SOAP报文
    ? WSE对加密的支持
    ? 配置WSE
    ? SOAP报文的对称加密算法
    ? 使用X.509证书来加密SOAP报文
    ? 选择报文的节点(组成部分)来加密
    ? 局限性和协作性细节
    ? 结论
    wse介绍
    为了使Web 服务在企业内部运行得更好,新一代的Web 服务规范被提出来.建议应该改善对Web 服务很重要的方面如 安全,可靠报文,发送附件对地区间的协调性.为了支持这些提议的标准,ms发布了WSE1.0 sp1,它包含了一系列的类来支持这些新的协议,如基于Microsoft的asp.net宿主的过滤器,拦截进入和发出的SOAP报文,拦截或者产生SOAP头来支持需求的功能.WSE支持以下的规范:
    ? WS-安全和Web 服务安全补遗
    ? WS附件
    ? WS路由
    ? WS引用
    wse的安全特性
    在WSE运行时,由一系列过滤器产生和读取WS-security兼容的SOAP报头.当在一台支持WSE的Web服务器上接收到SOAP报文时,SOAP报文经过一系列输入过滤器读取WS-*兼容的报头,如有必要修改它们,产生一系列相关程序对象.同样,输出的报文是经过一些列输出过滤器,序列化一定的报头如WSE对象定义的. 所有被WSE1.0 sp1所支持的Web服务安全特征由安全输入和输出过滤器通过SecurityInputFilter和SecurityOutputFilte对象来实现.它包含:数字签名,加密,签署和加密用户标识,签署和加密用x.509证书, 签署和加密用自定义2进制标识.
    加密soap报文
    用统一的格式来传输数据,使得有价值的数据容易被恶意用户访问,以至被拦截.使用SOAP和xml来传输数据不但数据有潜在的安全威胁,而且你Web 服务的内在工作方式有可能被发现,通过观察SOAP 报文本身带的 xml 语法.使用合适的加密算法,数据和信息接口可以得到完全的保护.加密是简单的使用一种可逆的算法使用特定的密钥对明文进行加密,使得数据如果不解密则无法阅读. 如今,互联网加密的最常见的形式引入了一种传输级的加密模式,例如IPSEC和SSL,在传输层加密 .有了一定的安全性,但是传输层加密影响性能,尤其是当只有SOAP报文的一部分需要加密时.而且传输层加密不允许报文安全的路由通过Web 服务作为中介.因为报文需要解密由媒介在她能以新的加密的流传送到最终接收者之前,
    xml加密是如何工作的
    Xml加密协议指定了SOAP报文的部分或者全部可以被加密.当使用xml加密时,将针对xml文档的部分进行加密,加密后的内容在EncryptedData节点内部.WS安全是基于 xml加密的,充分保证了使用xml加密来加密SOAP 报文时, EncryptedData 是security头部节点元素的引用.如果在SOAP报文的主体中有多个节点被加密时,每个节点参考自每个独立的且在ReferenceList 中的ReferenceData节点
    对于一个EncryptedData 节点,一些密钥的信息可以在KeyInfo节点指定,加密的算法则在EncryptionMethod节点中指定,keyinfo节点按照xml签名规范来定义的.
    一个加密后的soap 报文
    下面的SOAP报文示例有一个payment节点,含有一些敏感的客户信息.
    引用

    <SOAP:Envelope SOAP:xmlsn="http://www.w3.org/2002/12/SOAP-envelope">
    <SOAP:Header>
    ...
    </SOAP:Header>
    <SOAP:Body>
    ...
    <x:Order Type="Purchase" x:xmlns="http://example.com/order">
    <x:Payment Type="CreditCard">
    <x:CreditCard Type="Visa">
    <x:CardNumber>123456789123456</CardNumber>
    <x:ExperationDate>1108</ExperationDate>
    </x:CreditCard>
    </x:Payment>
    ...
    </x:Order>
    ...
    </SOAP:Body>
    </SOAP:Envelope>



    因为payment节点含有敏感的数据,所以它应该被加密.下面的例子显示了相同的信息,但是payment节点被EncryptedData节点代替了.EncryptedData节点内含有对payment 节点内部内容加密后的密文. EncryptedData节点是参考自security头中的DataReference 节点的
    引用

    <SOAP:Envelope SOAP:xmlsn="http://www.w3.org/2002/12/SOAP-envelope"
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
    xmlns:xsig="http://www.w3.org/2000/09/xmldsig#"
    xmlns:WSse="http://schemas.xmlSOAP.org/WS/2002/04/secext">
    <SOAP:Header>
    <WSse:Security>
    <xenc:ReferenceList>
    <xenc:DataReference URI="#OrderID"/>
    </xenc:ReferenceList>
    </WSse:Security> ...
    </SOAP:Header>
    <SOAP:Body>
    ...
    <x:Order Type="Purchase" x:xmlns="http://example.com/order">
    <xenc:EncryptedData Id="OrderId">
    <xenc:EncryptionMethod
    Algorithm= "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"
    <xsig:KeyInfo>
    <xsig:KeyName>My Symmetric Key</xsig:KeyName>
    </xsig:KeyInfo>
    <xenc:CipherData>
    <xenc:CipherValue>...</CipherValue>
    </xenc:CipherData>
    </xenc:EncryptedData>
    ...
    </x:Order>
    ...
    </SOAP:Body>
    </SOAP:Envelope>




    当然,在这个例子中,你可以用数字签名来签署该报文,来防止怀有恶意的人来窜改数据,或者用时间戳或者其他唯一的标识来判断信息是否受到攻击.
    加密的种类
    对称加密和不对成加密
    加密得算法可以分为对称加密和不对称加密.在对称加密算法中,一个密钥被用来进行信息交换得两方共享.发送方利用私钥得拷贝来加密数据.在接收方,利用同样得私钥的拷贝来解密数据.绝大多数得加密,如基于共享密码和共享安全标识都是对成加密得例子.
    在这种类型的系统中,一个中心的服务器分发共享的密钥给需要安全交互的使用者.对称加密的缺点是共享密钥的管理,分发和保护它们的安全性,特别是在象internet这样的公网上.
    为了克服在公共网络中管理密钥的的难度,使用成对的密钥来取代单一的密钥.在不对成加密算法中,双方都互相拥有一个私钥和一个密钥.
    公钥是利用一种不可逆的方法对私钥进行操作后产生的,因此一旦两者中的一种用来加密数据,另外一种就可以用来解密.另外,不可由公钥来推测出私钥,而且只有用私钥来解密用公钥加密的数据.当发送异步加密的报文时,发送者利用接收者的公钥加密报文,确保只有接收者可以利用他的私钥来解密报文.如果你用另外一种方式来处理,任何人都可利用可利用的公钥来解密报文.不对称加密是PKI的基础,pki是x.509安全标准的基础.不对成加密算法是一种典型基于对大数处理的算法,如指数合对数运算.它比对成加密算法需要更多的cpu时间来进行加密和解密.,因为这个原因,不对成加密经常用来安全的传送一个对称的”会话”密钥,用来加密交互的剩余部分,这也只是在信息交换的持续周期内有效.
    因为公钥可以很容易的获得,使用公钥进行加密减轻了分发和管理密钥的难度.不幸的是,这种方便性的代价是不对成加密算法通常比对成加密算法慢几个数量级.由于此,不对称加密方法只用来处理比较小的数据.例如安全密钥和标识以及数字签名.
    wse对加密的支持
    WSE支持对SOAP 报文的部分加密.对称加密使用一个共享的密钥,不对称加密支持使用x.509证书.当使用WSE来加密SOAP报文时,整个body节点的内容被加密,除非明确指定不要加密.下面举了2个例子,一个加密这个主体部分,一个加密部分.
    WSE运行时库实现了所有的WS-security.在SecurityInputFilter 和SecurityOutputFilter 类中SecurityOutputFilter 类中.前者通过查找Security节点在一个
    进入的SOAP报文中,如果该节点存在.它创建了一个代表任意安全标记和加密密钥,解密节点,验证任何数字签名的对象.对于一个进入的报文,任何任何安全的节点都剋通过报文产生的SOAPcontext对象的安全属性进行访问.相反的, SecurityOutputFilter为进出报文实施加密和签名的操作,附带任何特定的安全标记或者加密密钥.安全措施,比如添加标记,加密,或者签署进出报文利用报文的SOAPContext.Security和SOAPContext.ExtendedSecurity属性, ExtendedSecurity只在需要创建安全报头时候使用Security属性只在为包含最终目的地时使用
    配置wse
    尽管在安装时,WSE已经被安装到asp.net Web 服务器上,但是还需要一些额外的配置,如果需要那些asp.net应用使用安全支持的话.当创建完毕asp.net Web 服务后工程后,visual studio.net,引用Microsoft.Web.Services.dll 程序集需要加载到该项目中.你也需要对SOAPExtensionTypes节点添加一个新的SOAP扩展.这可在 Web.config文件中创建一个新的 add 节点.如下所示
    引用

    <configuration>
    <system.Web>
    ...
    <WebServices>
    <SOAPExtensionTypes>
    <add type=
    "Microsoft.Web.Services.WebServicesExtension,
    Microsoft.Web.Services,
    Version=1.0.0.0,
    Culture=neutral,
    PublicKeyToken=31bf3856ad364e35"
    priority="1" group="0" />
    </SOAPExtensionTypes>
    </WebServices>
    </system.Web>
    </configuration>



    type属性的值必须不能包含任何间断或者额外的空格.这个例子为了可读性有额外的换行. 如果WebServices 和SOAPExtensionTypes 节点不存在,它们必须加到 Web.config文件里面.一种更容易的方法是完全WSE配置工具.一种visual studio的插件,使用它您可以非常容易的配置使用WSE的Web service 项目.当然还有一下其他相关的配置必须手工配置.
    当使用WSE进行编程时,你需要添加一个Microsoft.Web.Services 和一个System.security名字空间的引用.在客户端和服务器端的工程中,如果既在客户请求和服务器回应中加密了.在客户部分你应该使用添加Web引用工具为基于WSE的Web service工程产生Web service代理.
    给soap报文进行对称加密
    接下来,让我们再来看看如何用WSE来给SOAP报文使用对称密钥加密。下面的例子是基于一个启用WSE的Web服务的,这个Web服务将返回一个SOAP回应报文,在该报文正文内包含了一些敏感数据。这么说,客户端给服务发送一个简单的Web服务请求,该请求将返回一个由三元 DES对称加密算法(使用了一个共享密钥和一个初始向量,IV)加密过的XML文档,当客户端收到了加密后的回应信息后,SecurityInputFilter将调用一个在客户端的解密密钥提供程序,来访问客户端上相同的共享密钥,以此来对报文体进行解密,这个解密密钥提供程序必须由你来编写,并且提供一个用于同步共享密钥的方法。这些例子假设双方都知道密钥,并且我们所要做的,仅仅是提供密钥的名字,以此作为一个暗示,给对方知道我们用的是哪个密钥加密的信息。
    双方之间管理、同步和和对密钥保密的时候一定要多加小心。有个解决方案使用了一个分布式密钥机制,例如Kerberos。但从WSE的1.0版本开始,WSE就不再继续支持Kerberos了。
    加密对外发送的报文
    这里我简单描述下如何创建一个可以返回个被加密的XML文档的Web服务。第一步先用using指示符来添加必要的命名空间,如下:
    引用
    using System.Web.Services;
    using Microsoft.Web.Services;
    using Microsoft.Web.Services.Security;
    using System.Security.Cryptography;
    using System.Security.Cryptography.Xml;
    using System.Xml;



    GetXmlDocument方法使用了的.NET框架实现的三元DES算法,采用128位密钥和64位初始化向量(IV),能够生成对称密钥。这个密钥还将拥有一个名字,并被添加到应答报文的SoapContext元素上,之后被SecurityOutputFilter使用于加密简单的XML文档,这个方法最后将返回给客户端。更多关于.NET框架的加密技术,请看.NET框架开发者指南上的Cryptography Overview一文。
    引用

    //返回由三元DES对称算法加密后的数据
    [WebMethod (Description="返回一个由对称加密算法机密后的敏感XML文档", EnableSession=false)]

    public XmlDocument GetXmlDocument()
    {
    //创建一个用于返回的简单的XML文档
    XmlDocument myDoc = new XmlDocument();
    myDoc.InnerXml =
    "<EncryptedResponse>这里是敏感数据.</EncryptedResponse>";

    //得到对外发送的回应报文的SoapContext
    SoapContext myContext = HttpSoapContext.ResponseContext;

    //创建一个用于加密的对称密钥,由于密钥是对称的,这些相同的数据必须存在有需求的客户端上。

    //定义共享的16字节数组,用来表示128位密钥
    byte[] keyBytes = {48, 218, 89, 25, 222, 209, 227, 51, 50, 168, 146,
    188, 250, 166, 5, 206};

    //定义共享的8字节(64位)数组,也就是初始化向量(IV)
    byte[] ivBytes = {16, 143, 111, 77, 233, 137, 12, 72};

    //创建三元DES算法的新实例
    SymmetricAlgorithm mySymAlg = new TripleDESCryptoServiceProvider();

    //设置好密钥和IV
    mySymAlg.Key = keyBytes;
    mySymAlg.IV = ivBytes;


    //创建一个新的WSE对称加密密钥
    EncryptionKey myKey = new SymmetricEncryptionKey(mySymAlg);


    //给他取个名字?
    KeyInfoName myKeyName = new KeyInfoName();
    myKeyName.Value = "http://example.com/symmetrictestkey";
    myKey.KeyInfo.AddClause(myKeyName);


    //使用对称密钥来创建一个新的EncryptedData元素
    EncryptedData myEncData = new EncryptedData(myKey);


    //将EncryptedData元素添加到SOAP回应上,告诉过滤器用指定的密钥来加密信息正文

    myContext.Security.Elements.Add(myEncData);

    return myDoc;
    }



    基于前面的方法,WSE管道产生了下面有相应的安全头信息,密文和密钥信息的回应报文:
    引用

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
    <wsu:Timestamp
    xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
    <wsu:Created>2003-02-11T02:07:23Z</wsu:Created>
    <wsu:Expires>2003-02-11T02:12:23Z</wsu:Expires>
    </wsu:Timestamp>
    <wsse:Security soap:mustUnderstand="1"
    xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
    <xenc:ReferenceList
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
    <xenc:DataReference URI=
    "#EncryptedContent-f50076e3-5aea-435e-8493-5d7860191411" />
    </xenc:ReferenceList>
    </wsse:Security>
    </soap:Header>
    <soap:Body xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
    wsu:Id="Id-d2f22e02-a052-4dcb-8fbc-8591a45b8a9f">
    <xenc:EncryptedData
    Id="EncryptedContent-f50076e3-5aea-435e-8493-5d7860191411"
    Type="http://www.w3.org/2001/04/xmlenc#Content"
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
    <xenc:EncryptionMethod
    Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <KeyName>http://example.com/symmetrictestkey</KeyName>
    </KeyInfo>
    <xenc:CipherData>
    <xenc:CipherValue>0T5ThoGg14JmElph...qDJS=</xenc:CipherValue>
    </xenc:CipherData>
    </xenc:EncryptedData>
    </soap:Body>
    </soap:Envelope>




    注意,在报文正文中ReferenceList元素包含了一个到EncryptedData元素的引用,这个元素包含了密钥的名字,使用的加密算法和一个数据的密文形式。
    解密收到的报文
    不管是在客户端还是在服务器端,WSE总是在SecurityInputFilter实现报文解密的,由于对称加密需要由公共密钥派生出来的加密密钥,你需要创建一个SecurityInputFilter能够调用的方法来得到这个对称密钥,然后你就能使用包含在EncryptedData中的密钥和算法信息来帮你找到正确的共享密钥和加密算法了。这个方法必须实现在从Microsoft.Web.Services.Security.IDecryptionKeyProvider派生出来的类中。在我的例子中,DecryptionKeyProvider.GetDecryptionKey方法返回了对称密钥,如下:
    引用


    public DecryptionKey GetDecryptionKey(string encAlgorithmUri,
    KeyInfo keyInfo)
    {

    //重新创造同样的用于表示128位密钥的16个字节
    byte[] keyBytes = {48, 218, 89, 25, 222, 209, 227, 51, 50, 168, 146,
    188, 250, 166, 5, 206};


    //重新创造表示初始化向量的8个字节(64位)
    byte[] ivBytes = {16, 143, 111, 77, 233, 137, 12, 72};

    SymmetricAlgorithm mySymAlg = new TripleDESCryptoServiceProvider();
    mySymAlg.Key = keyBytes;
    mySymAlg.IV = ivBytes;

    //重新创建对称加密密钥
    DecryptionKey myKey = new SymmetricDecryptionKey(mySymAlg);

    return myKey;
    }



    即便在我的方法中并没使用他们,WSE还是要把KeyInfo元素和加密算法的URI传递给这个方法的,决定使用哪一个共享密钥或者加密算法来产生对称密钥

    为了让SecurityInputFilter能够访问到GetDecryptionKey方法,下面的配置信息必须加入到应用程序的配置文件中(也就是 app.config 文件)

    引用


    <configuration>
    ...
    <microsoft.web.services>
    <security>
    <decryptionKeyProvider
    type="MyClient Assembly.DecryptionKeyProvider,
    MyClientAssembly" />
    </security>



    type 属性不能有任何过多的空格或者任何换行。他们只包含上面的内容以增强可读性,这个也可一用WSE设置工具来修改。一旦DecryptionKeyProvider类被添加到客户端而且WSE安全支持已经配置好了,WSE将自动拦截加密数据,一个基于标准的Web服务的2次开发平台程序,就可以让你随心所欲的给客户端编程了。

    使用 X.509 证书来给SOAP报文加密
    正如我前面提到的,非对称操作有一定开销。当传输大量数据时,从性能上来说,用非对称算法来加密这些数据会显得不太实际,WSE就这个问题,实现了一种伪非对称性加密(pseudo-asymmetric encryption)。和非对称性加密的报文相比,WSE使用一个非对称性算法和X.509证书的一个公开备份,以此来加密对称密钥,而实际上这些被用来给报文加密。当收到报文后,SecurityInputFilter得到和X.509证书相关联的私有密钥,以此给对称密钥解密,然后用解密后的密钥给报文正文解密。为了能让这个例子能够正常工作,一个来自受信任的证书认证的X.509证书(支持加密),必须出现在客户机器上当前用户帐号的个人证书储藏室里面,这个证书的私有密钥也必须出现在本地机器在主管Web服务的服务器的帐号里。另外,CA证书链中的一个证书必须出现在客户端的受信任储存室里,那样WSE才知道可以信任接受到的X.509证书。
    加密对外发送的报文
    我已经修改了前面的GetXmlDocument方法,让它可以使用由WSE实现的基于X.509非对称加密技术。加密回应报文,FindCertificateBySubjectString方法可以用来接收客户端证书的公开备份,一个来自本地机器账号的个人储存室给的客户端证书。这个证书然后被用来创建一个新的 X.509安全Token,这个Token将被加入到响应报文的SoapContext的安全Token集合里。另外,在对称加密例子中引用的命名空间,你应该再加一个using指示附来引用一个Microsoft.WebServices.Security.X509命名空间。GetXmlDocument方法代码如下:
    引用
    //创建一个用于返回的简单xml文档
    XmlDocument myDoc = new XmlDocument();
    myDoc.InnerXml =
    "<EncryptedResponse>This is sensitive data.</EncryptedResponse>";
    "<EncryptedResponse>这里是敏感数据.</EncryptedResponse>";

    //得到响应报文的SoapContext
    SoapContext myContext = HttpSoapContext.ResponseContext;

    //打开并读取本地机器帐号的个人证书储存室
    X509CertificateStore myStore =
    X509CertificateStore.LocalMachineStore(
    X509CertificateStore.MyStore);
    myStore.OpenRead();

    //查找所有名为”我的证书”的证书,然后将所有匹配的证书添加到证书集合中
    X509CertificateCollection myCerts =
    myStore.FindCertificateBySubjectString("My Certificate");
    X509Certificate myCert = null;

    //查找在集合中中的第一个证书
    if (myCerts.Count > 0)
    {
    myCert = myCerts[0];
    }

    //确定我们有一个可以用于加密的证书
    if (myCert == null || !myCert.SupportsDataEncryption)
    {
    throw new ApplicationException("Service is not able to
    encrypt the response");

    return null;
    }
    else
    {
    //使用有效的证书来创建一个安全Token
    X509SecurityToken myToken = new X509SecurityToken(myCert);
    //WSE将使用这个标记来加密报文正文的
    //WSE产生一个KeyInfo元素,用来请求客户端上曾用于给报文解密的证书

    EncryptedData myEncData = new EncryptedData(myToken);
    //将已加密数据元素添加到响应报文的SoapContext上
    myContext.Security.Elements.Add(myEncData);

    return myDoc;
    }



    基于前面的方法,WSE管道产生了下面的有相应Security头、密文和密钥信息的元素:
    引用

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
    <wsu:Timestamp
    xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
    <wsu:Created>2003-02-11T01:34:01Z</wsu:Created>
    <wsu:Expires>2003-02-11T01:39:01Z</wsu:Expires>
    </wsu:Timestamp>
    <wsse:Security soap:mustUnderstand="1"
    xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
    <xenc:EncryptedKey
    Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
    <xenc:EncryptionMethod
    Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <wsse:SecurityTokenReference>
    <wsse:KeyIdentifier ValueType="wsse:X509v3">
    YmlKVwXYD8vuGuYliuIYdEAQQPw=
    </wsse:KeyIdentifier>
    </wsse:SecurityTokenReference>
    </KeyInfo>
    <xenc:CipherData>
    <xenc:CipherValue>UJ64Addf3Fd59XsaQ=…</xenc:CipherValue>
    </xenc:CipherData>
    <xenc:ReferenceList>
    <xenc:DataReference URI=
    "#EncryptedContent-608eef8b-4104-4469-95b6-7cb4703cfa03" />
    </xenc:ReferenceList>
    </xenc:EncryptedKey>
    </wsse:Security>
    </soap:Header>
    <soap:Body xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
    wsu:Id="Id-70179c5b-4975-4932-9ecd-a58feb34b0d3">
    <xenc:EncryptedData
    Id="EncryptedContent-608eef8b-4104-4469-95b6-7cb4703cfa03"
    Type="http://www.w3.org/2001/04/xmlenc#Content"
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
    <xenc:EncryptionMethod
    Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
    <xenc:CipherData>
    <xenc:CipherValue>
    4o1b4befwBJu6tzuaygfrAaX0UGtaYKcw2klIbuZPjLi...z8i2ypHN4+w==
    </xenc:CipherValue>
    </xenc:CipherData>
    </xenc:EncryptedData>
    </soap:Body>
    </soap:Envelope>



    注意在这个已加密的报文里面,由非对称加密过的EncryptedKey元素包含了用于给报文正文加密的对称加密密钥。ReferenceList元素引用了报文正文的EncryptedData元素的Id属性。虽然我在我的例子中没这样做,标记这个消息以便能让容器验证发送者其实是个不错的想法。关于使用WSE来标记报文的详细信息,看WS-Security Authentication and Digital Signatures with Web Services Enhancements
    给收到的报文解密
    当收到一个由X.509证书加密后的报文后,SoapInputFilter会自动尝试使用用户密钥储存室的私有密钥来进行解密,当然,这个需要告诉WSE运行时哪里可以找到这个证书的额外配置信息。这个信息由应用程序配置文件的Security元素所指定,这个例子在客户端上的应用程序配置文件是App.config。对于 X.509加密,你只需要添加一个x509子节点,内容和下面一样就可以了
    引用

    <x509
    storeLocation="CurrentUser"
    verifyTrust="true"
    allowTestRoot="false" />




    在我的例子中,我将x509节点的storeLocation属性设为CurrentUser,假设证书在当前用户的证书储存室里,当我使用了来自CA的受信任证书之后,我也将verifyTrust设为true了。这些属性还能够用WSE的设置工具来修改。利用这些信息,WSE能够得到报文中证书的私有密钥,还能用这个来给对称性会话密钥解密,解密后的内容到头来还要给报文正文解密。
    选择用于解密的报文元素
    当整个消息正文由默认设置给加密后,WSE能被用来给SOAP报文内的特定元素加密;唯一的问题是,在Security头元素那的元素不能被加密。你还可以加密嵌套的元素,
    在这个例子服务中,我修改了GetXmlDocument方法用的X.509版本,用一个基于X.509的安全Token来同时给EncryptedSubResponse和它的EncryptedResponse父节点进行数字化加密,返回的XML文档如下:
    引用
    <response>
    <NotEncrypted>
    回应报文的这里没有必要被加密
    </NotEncrypted>
    <EncryptedResponse>
    <EncryptedSubResponse>
    这里是敏感数据.
    </EncryptedSubResponse>
    </EncryptedResponse>
    </Response>



    为了加密一个元素,它需要一个wsu:Id属性,以便当XML被序列化后引用可以加到该节点上了。命名空间wsu被定义为:
    引用
    xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility


    为了完成这个,我将这个XML加到一个新的XML文档,然后通过.NET框架支持的Microsoft XML文档对象模型(DOM)给它添加一个Id属性,此外还需要将配件System.Xml加入到工程引用里面,加上下面的话:
    引用

    using System.Xml;
    using System.Xml.Serialization;



    当我将多个Id属性加到嵌套的元素上后,我由EncryptedSubResponse元素开始依次遍历到它的父节点EncryptedResponse,如下:
    引用

    string [] myId = {"Id:" + Guid.NewGuid(),"Id:" + Guid.NewGuid()};


    //创建一个用于返回XML的XML文档
    XmlDocument myDoc = new XmlDocument();
    myDoc.LoadXml("<Response>" +
    "<NotEncrypted>回应报文的这里没有必要加密" +
    "</NotEncrypted>" +
    "<EncryptedResponse>" +
    "<EncryptedSubResponse>" +
    "这里是敏感数据. " +
    "</EncryptedSubResponse>" +
    "</EncryptedResponse>" +
    "</Response>");

    //得到EncryptedSubResponse节点
    XmlNode = myDoc.FirstChild.LastChild.FirstChild;


    //向上遍历元素,添加两个Id属性
    //向上保证内部的多数元素可以优先被加密
    //否则我们会得到一个异常
    for (int i=0;i<myId.Length;i++)
    {

    //创建新的Id属性
    string wsu = "http://schemas.xmlsoap.org/ws/2002/07/utility";
    XmlNode myAttr = myDoc.CreateNode(XmlNodeType.Attribute, "wsu",
    "Id", wsu);
    myAttr.Value = myId[ i ];

    //将属性添加到文档
    root.Attributes.SetNamedItem(myAttr);
    root = root.ParentNode; // 移动到父节点
    }



    假设我早就用我前面的逻辑得到了来自X.509证书的安全记号,我将这些引用添加到EncryptedData元素,如下:
    引用

    //循环遍历Id值,将其添加到新的EncryptedData元素上
    for (int i=0;i<myId.Length;i++)
    {
    //创建一个新的头,”#”是的前缀,用来保证相关的URI能够引用到头
    EncryptedData myEncHeader = new EncryptedData(myToken, "#"+myId[ i ]);
    //添加一个新的头到集合中
    myContext.Security.Elements.Add(myEncHeader);
    }
    //返回加密数据
    return myDoc;



    下面是被WSE在运行时序列化后产生的报文加密后的结果
    引用

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
    <wsu:Timestamp
    xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
    <wsu:Created>2003-02-11T20:21:52Z</wsu:Created>
    <wsu:Expires>2003-02-11T20:26:52Z</wsu:Expires>
    </wsu:Timestamp>
    <wsse:Security soap:mustUnderstand="1"
    xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
    <xenc:EncryptedKey
    Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
    <xenc:EncryptionMethod
    Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <wsse:SecurityTokenReference>
    <wsse:KeyIdentifier ValueType="wsse:X509v3">
    YmlKVwXYD8vuGuYliuIOXOY7ZYN9PwHbfAhCiYOV0aYdEAQQPw=
    </wsse:KeyIdentifier>
    </wsse:SecurityTokenReference>
    </KeyInfo>
    <xenc:CipherData>
    <xenc:CipherValue>
    UyKGBEXdY8lYSzqgdgxOXOY7ZYN9PwHbfAhCiYOV0...bwRnWk=
    </xenc:CipherValue>
    </xenc:CipherData>
    <xenc:ReferenceList>
    <xenc:DataReference URI=
    "#EncryptedContent-cf014249-0e2a-4f8b-9002-13a7de916be0" />
    </xenc:ReferenceList>
    </xenc:EncryptedKey>
    <xenc:EncryptedKey
    Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
    <xenc:EncryptionMethod
    Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <wsse:SecurityTokenReference>
    <wsse:KeyIdentifier ValueType="wsse:X509v3">
    YmlKVwXYD8vuGuYliuIYdEAQQPw=
    </wsse:KeyIdentifier>
    </wsse:SecurityTokenReference>
    </KeyInfo>
    <xenc:CipherData>
    <xenc:CipherValue>
    In8Kf1cIdiJJJXCLZ+... wMqBEevXmzk=
    </xenc:CipherValue>
    </xenc:CipherData>
    <xenc:ReferenceList>
    <xenc:DataReference URI=
    "#EncryptedContent-0744279a-02bf-4ad1-998e-622208eded0e" />
    </xenc:ReferenceList>
    </xenc:EncryptedKey>
    </wsse:Security>
    </soap:Header>
    <soap:Body>
    <GetXmlDocumentResponse xmlns="http://example.com/dime/">
    <GetXmlDocumentResult>
    <Response>
    <NotEncrypted>
    This part of the response does not need encryption
    </NotEncrypted>
    <EncryptedResponse
    wsu:Id="Id:e5e8d792-abe7-4476-91d0-856fbdf4a958"
    xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
    <xenc:EncryptedData
    Id=
    "EncryptedContent-cf014249-0e2a-4f8b-9002-13a7de916be0"
    Type="http://www.w3.org/2001/04/xmlenc#Content"
    xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
    <xenc:EncryptionMethod
    Algorithm=
    "http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
    <xenc:CipherData>
    <xenc:CipherValue>
    2MNHCkGVH/5jb0pF4pCh3u2VaUKsWSA...AfEvJZT=
    </xenc:CipherValue>
    </xenc:CipherData>
    </xenc:EncryptedData>
    </EncryptedResponse>
    </Response>
    </GetXmlDocumentResult>
    </GetXmlDocumentResponse>
    </soap:Body>
    </soap:Envelope>



    注意,在这个加密后的报文里,这里有一个用于表示X.509证书的BinarySecurityToken元素,但有两个分开的EncryptedKey元素,每个EncryptedData元素都被添加到SoapContext,在最外面的被加密的元素中(EncryptedResponse),你只能看到EncryptedData元素,当EncryptedResponse被加密后,表示EncryptedSub元素的EncryptedData元素也随之转换为密文了。当这个报文在客户端被收到时,SecurityInputFilter使用来自记号的信息来得到曾给两个EncryptedKey元素解密过的私有密钥。
    展开全文
  • 使用私钥加密报文http模式

    千次阅读 2014-01-10 17:59:57
    安全性要求高的报文,怎样对报文加密? 是使用私钥里进行加密报文,使用公钥解密报文。   public class MsgRealTimeTransDemo {    /**  * 为简洁起见,配置信息作为静态变量,如有调整,可进行修改  */  ...
  • RSA公钥加密和私钥加密整个结构是一致的,《Postman报文进行加密之RSA+Bate64》中私钥做的签名,这里RSA公钥是进行加密。//--------RSA使用公钥AES密码进行加密-------------//functionpubencrypt(pubencrypt_key,...
  • RSA公钥加密和私钥加密整个结构是一致的,《Postman报文进行加密之RSA+Bate64》中私钥做的签名,这里RSA公钥是进行加密。 //--------RSA使用公钥AES密码进行加密-------------// functionpubencrypt...
  • 最近在项目接口测试中使用postman,对于一般的非加密HTTP请求可以很方便直接的测试,但是有些需要签名验签的报文,就需要对报文进行加解密处理,在实际工作过程中,参考了网络上共享的资源,下面对自己工作过程做一...
  • 如何在Postman中对报文进行AES+Base64加密请求 相信做软件开发的人,都少不了用一些好用的工具,Postman就是其中的一个。如果是拿Postman做一些非加密的HTTP请求,非常方便,也不需要额外的说明,但是如果要做一些...
  • Pre-request Script是指在发送报文前执行的脚本,用于请求包中的各种参数做一些个性化的处理。 接上篇文章,实际获取的sText签名需要传递给源报文参数sign,报文内容如下signText,把报文作为一个整体进行AES加密...
  • 比如报文加密之后由于字节长度变长往往需要升级CAN总线到CAN FD等。这很多国内本地的车厂来讲是一个不小的挑战。笔者之前设计了针对CAN网络进行报文加密的方案,既可以做到保持原有总线架构不用变...
  • 最近在项目接口测试中使用postman,对于一般的非加密HTTP请求可以很方便直接的测试,但是有些需要签名验签的报文,就需要对报文进行加解密处理,在实际工作过程中,参考了网络上共享的资源,下面对自己工作过程做一...
  • 在做APP类的产品时,整个业务逻辑通常都会放在服务端,客户端大部分仅用来展示。 在客户端与服务端的交互... 本文展示如何通过3DES对报文进行加密,并通过Nginx自带的gzip对报文进行压缩。 一: 加密规则及流程
  • 最近在项目接口测试中使用postman进行工作,对于一般的非加密HTTP请求可以很方便直接的测试,但是有些需要签名验签的报文,就需要对报文进行加解密处理,在实际工作过程中,参考了网络上共享的资源,下面对自己工作...
  • 最近在项目接口测试中使用postman,对于一般的非加密HTTP请求可以很方便直接的测试,但是有些需要签名验签的报文,就需要对报文进行加解密处理,在实际工作过程中,参考了网络上共享的资源,下面对自己工作过程做一...
  • 讲述了SOAP报文加密是如何进行,在WS安全和XML加密规范中又是如何定义的。目录:? 介绍WSE? WSE的安全特性? 加密SOAP报文? WSE加密的支持? 配置WSE? SOAP报文的对称加密算法? 使用X.509证书来加密SOAP报文? 选
  • 讲述了SOAP报文加密是如何进行,在WS安全和XML加密规范中又是如何定义的。目录:? 介绍WSE? WSE的安全特性? 加密SOAP报文? WSE加密的支持? 配置WSE? SOAP报文的对称加密算法? 使用X.509证书来加密SOAP报文? 选...
  • 为了使数据传送更安全一些,公司要求你编写一个加密数据的程序。 程序读取一个四位整数,然后按如下规则加密: 每位数字都加上7,然后用和除以10的余数取代该数字;再把第一位与第三位交换,第二位与第四位交换。...
  • 利用WSE 加密SOAP报文(1)

    千次阅读 2004-03-22 15:50:00
    摘要:如何使用支持WS安全规范的WSE(Microsoft Web Services ...讲述了SOAP报文加密是如何进行,在WS安全和XML加密规范中又是如何定义的。目录:l 介绍WSEl WSE的安全特性l 加密SOAP报文l WSE加密的支持l 
  • 由于jmeter不支持对报文进行转pin计算,因此开发此程序对银行卡密码进行加密计算(银联标准规范)
  • 利用WSE 加密SOAP报文(3)

    千次阅读 2004-03-23 09:55:00
    WSE对加密的支持 WSE支持SOAP 报文的部分加密.对称加密使用一个共享的密钥,不对称加密支持使用x.509证书.当使用WSE来加密SOAP报文时,整个body节点的内容被加密,除非明确指定不要加密.下面举了2个例子,一个加密这...
  • 报文传输方式为2时,报文通信内容的首字母固定为“A4”,按先后顺序每4bit截取一次,转换成16进制数,每个16进制数以ASCII的形式表示。如数据长度不是4bit的整数倍,高位捕0,凑成整数倍。
  • 加密系统的组成与过程来源:超时代软件更新...加密和解密过程形成数据库透明加密是指库内数据的加密和解密,数据库的访问程序是完全无感知的。特别是应用系统,不需要做任何修改和编译,就能够直接应用到加密...
  • 讲述了SOAP报文加密是如何进行,在WS安全和XML加密规范中又是如何定义的。目录:? 介绍WSE? WSE的安全特性? 加密SOAP报文? WSE加密的支持? 配置WSE? SOAP报文的对称加密算法? 使用X.509证书来加密SOAP报文
  • 1对称加密--加解密使用同一秘钥 解密和加密用同一个秘钥的方式成为共享秘钥加密; 共享秘钥加密必须先将秘钥发给对方,这个时候如果通信被监听,...发送密文的一方利用公开秘钥对报文加密,接收密文方则用私有秘...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 874
精华内容 349
关键字:

对报文加密