精华内容
下载资源
问答
  • 网络加密如何协商密钥

    千次阅读 2012-12-05 18:36:00
    所以最好就是有个密钥动态生成,然后双方协商,但还不能别人知道。   https采用的ssl:  1) 服务动态生成一对公钥A和密钥B(非对称加密),然后把公钥A发送给客户端,客户端自己动态生成一个对称密钥C,...

     方法应该有很多种:

       双方提前制定好加密算法和密钥,但危险就是有人泄露了密钥和算法。

     

    所以最好就是有个密钥动态生成,然后双方协商,但还不能让别人知道。

     

    https采用的ssl

         1)  服务动态生成一对公钥A和密钥B(非对称加密),然后把公钥A发送给客户端,客户端自己动态生成一个对称密钥C,然后通过公钥A

               加密后发送给服务器,服务器通过密钥B得到对称密钥C。  此后双方通过对称密钥C加密数据。

     

           这样的算法很安全,别人没法提前知道公钥A和密钥B,就算通过抓包知道公钥A,那么也无法知道对称密钥C。

     

    Diffie-Hellman密钥交换算法原理:

    (1)Alice与Bob确定两个大素数n和g,这两个数不用保密

    2)Alice选择另一个大随机数x,并计算A如下:A=gx mod n

    3)Alice将A发给Bob

    4)Bob选择另一个大随机数y,并计算B如下:B=gy mod n

    5)Bob将B发给Alice

    6)计算秘密密钥K1如下:K1=Bx mod n

    7)计算秘密密钥K2如下:K2=Ay mod n

             K1=K2,

    因此Alice和Bob可以用其进行加解密。

     

    RSA加密算法是基于这样的数学事实:两个大素数相乘容易,而对得到的乘积求因子则很难。加密过程如下:

    (1)选择两个大素数P、Q

    (2)计算N=P*Q

    (3)选择一个公钥(加密密钥)E,使其不是(P-1)与(Q-1)的因子

    (4)选择私钥(解密密钥)D,满足如下条件:          (D*E) mod (P-1)(Q-1)=1

    (5)加密时,明文PT计算密文CT如下:          CT=PTE mod N

    (6)解密时,从密文CT计算明文PT如下:          PT=CTDmodN 这也是SSL中会用一种密钥交换算法。

     

     

    其实发现了,基本思路就是通过一些方法在网络上交互的密钥,让抓包工具拿不到。尽量采用一些随机数策略,让算法制定人也无法抓包得到密钥。

     

     

    展开全文
  • 有很多能够无线局域网安全设置更容易一些的方法:目前有很多向导程序在设置一个家庭或者小办公室无线局域网的时候自动与WEP或者WPA-PSK输入相匹配。热点用户可以寻找T-Mobile公司的连接管理器那样的软件。这个软件...
  • 在许多企业中,安全策略(security policy)通过在外部网络上传输来提供对文档的加密。当然,有很多软件都可以用来加密,但是 FastReport.Net 允许你按照他们自己的方法去实现。对报表进行加密,它使用能提供高度...

    给报表加密是一个非常有用的选项。在许多企业中,安全策略(security policy)通过在外部网络上传输来提供对文档的加密。当然,有很多软件都可以用来加密,但是 FastReport.Net 允许你按照他们自己的方法去实现。对报表进行加密,它使用能提供高度保护的AES算法。

    在 FastReport.Net 中给报表加密没有任何困难,只需设置密码即可。让我们详细看看怎么做:

    在FastReport.Net中,如何给报表加密

    1.创建一个报表;

    2.在菜单“报表” - >“选项”- > “安全”选项卡中打开报表的属性。

    如你所见,你只能设置报表的密码。通过设置报表的密码,我们将自动启用它的加密。现在,只有知道密码的人才能打开它。

    1.为报表设置一个密码;

    2.保存报表;

    3.现在尝试在设计器中打开它。然后我们得到一个对话框:

    在FastReport.Net中,如何给报表加密

    只有知道密码您才能打开该报表。

    不幸的是,我们还没有为web提供加密的报表。也就是说这些报表的范围是有限的。如前所述,加密功能可用于在企业内部交换报表文件,或与客户合作时交换报表文件。

    展开全文
  • 程序员之网络安全系列(三):数据加密之对称加密算法 程序员之网络安全系列(四):数据加密之非对称秘钥 程序员之网络安全系列(五):数字证书以及12306的证书问题 程序员之网络安全系列(六):动态密码 前文...

    系列目录:

    前文回顾

    假如,明明和丽丽相互不认识,明明想给丽丽写一封情书,让隔壁老王送去

    1. 如何保证隔壁老王不能看到情书内容?(保密性)
    2. 如何保证隔壁老王不修改情书的内容?(完整性)
    3. 如何保证隔壁老王不冒充明明?(身份认证)
    4. 如何保证明明不能否认情书是自己写的?(来源的不可否认)

    security-1.png

    上一节,我们使用了Hash算法保证了情书的完整性,也就是确保“隔壁王叔叔”没有修改明明的情书,那么这一节我们来看看如何保证“隔壁王叔叔”不能看到情书的内容,也就是保密性。

    数据加密

    要想不让别人看到数据,那么我们就们就需要对数据加密。

    加密技术 是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。
    加密包括两个元素:算法和密钥。一个加密算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。

    举个例子:

    假设我们要对LOVE加密,我们可以先定义字母的顺序ABCDEFGHIJKLMNOPQRSTUVWXYZ,然后我们让每个字母向后移动两位,那么LOVE就变为了NQXG

    L------>N
    O------>Q
    V------>X
    E------>
    LOVE--->NQXG

    我想这就是最简单的加密方式。

    密钥加密技术的密码体制分为对称密钥体制和非对称密钥体制两种。

    对数据加密的技术分为两类,即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以数据加密标准(DES,Data Encryption Standard)算法为典型代表,非对称加密通常以RSA(Rivest Shamir Ad1eman)算法为代表。对称加密的加密密钥和解密密钥相同,而非对称加密的加密密钥和解密密钥不同,加密密钥可以公开而解密密钥需要保密。

    对称加密

    对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥。
    比如,我们给WORD文档设置密码1234, 那么其他人想要打开文档也必须输入1234才能打开。

    常用加密算法:

    • DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
    • 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
    • AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
    • RC4,也是为 RSA Data Security, Inc. 开发的密码系统的商标名称。

    传统的DES由于只有56位的密钥,从1997年开始,RSA公司发起了一个称作“向DES挑战”的竞技赛。在首届挑战赛上,罗克·维瑟用了96天时间破解了用DES加密的一段信息。1999年12月22日,RSA公司发起“第三届DES挑战赛(DES Challenge III)”。2000年1月19日,由电子边疆基金会组织研制的25万美元的DES解密机以22.5小时的战绩,成功地破解了 DES加密算法。DES已逐渐完成了它的历史使命。

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

    对称加密算法的优点:

    • 算法公开
    • 计算量小
    • 加密速度快,加密效率高

    对称加密算法的缺点

    • 加解密双方需要使用相同的秘钥
    • 秘钥管理很不方便,如果用户很多,那么秘钥的管理成几何性增长
    • 任何一方秘钥泄露,数据都不安全了

    最后

    通过本节,我们知道当明明给丽丽情书时,可以用DES或者AES对数据进行加密,即使“隔壁王叔叔”拿到信件也看不懂内容,同时使用上一节的Hash算法保证了情书的内容完整,但是这就需要明明和丽丽提前设置一个秘钥。

    代码示例

    下面的代码输出如下结果

        I Love You, Li Li
        Encrypeted: 0t9glwGMmwtGs8B4QCotyZkKf091WElCwG659QiVVw0=
        Decrypeted: I Love You, Li Li
        

    .NET 源码:

        using System;
        using System.Security.Cryptography;
        using System.IO;
        using System.Text;
    
        namespace AES
        {
            class MainClass
            {
                public static void Main (string[] args)
                {
                    string password = "Don't believe wang shu shu";
                    string orginTextToSent = "I Love You, Li Li";
                    Console.WriteLine (orginTextToSent);
    
                    string encryptedText=EncryptText(orginTextToSent, password);
    
                    Console.WriteLine ("Encrypeted: " + encryptedText);
    
                    string DecryptedText = DecryptText (encryptedText, password);
                    Console.WriteLine ("Decrypeted: " + DecryptedText);
    
                }
    
    
    
                public static byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
                {
                    byte[] encryptedBytes = null;
    
                    // Set your salt here, change it to meet your flavor:
                    // The salt bytes must be at least 8 bytes.
                    byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (RijndaelManaged AES = new RijndaelManaged())
                        {
                            AES.KeySize = 256;
                            AES.BlockSize = 128;
    
                            var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                            AES.Key = key.GetBytes(AES.KeySize / 8);
                            AES.IV = key.GetBytes(AES.BlockSize / 8);
    
                            AES.Mode = CipherMode.CBC;
    
                            using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
                            {
                                cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
                                cs.Close();
                            }
                            encryptedBytes = ms.ToArray();
                        }
                    }
    
                    return encryptedBytes;
                }
    
                public static byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
                {
                    byte[] decryptedBytes = null;
    
                    // Set your salt here, change it to meet your flavor:
                    // The salt bytes must be at least 8 bytes.
                    byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (RijndaelManaged AES = new RijndaelManaged())
                        {
                            AES.KeySize = 256;
                            AES.BlockSize = 128;
    
                            var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                            AES.Key = key.GetBytes(AES.KeySize / 8);
                            AES.IV = key.GetBytes(AES.BlockSize / 8);
    
                            AES.Mode = CipherMode.CBC;
    
                            using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write))
                            {
                                cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
                                cs.Close();
                            }
                            decryptedBytes = ms.ToArray();
                        }
                    }
    
                    return decryptedBytes;
                }
    
    
                public static string EncryptText(string input, string password)
                {
                    // Get the bytes of the string
                    byte[] bytesToBeEncrypted = Encoding.UTF8.GetBytes(input);
                    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    
                    // Hash the password with SHA256
                    passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    
                    byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);
    
                    string result = Convert.ToBase64String(bytesEncrypted);
    
                    return result;
                }
    
                public static string DecryptText(string input, string password)
                {
                    // Get the bytes of the string
                    byte[] bytesToBeDecrypted = Convert.FromBase64String(input);
                    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
                    passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    
                    byte[] bytesDecrypted = AES_Decrypt(bytesToBeDecrypted, passwordBytes);
    
                    string result = Encoding.UTF8.GetString(bytesDecrypted);
    
                    return result;
                }
    
            }
        }
    展开全文
  • 采用AES解密,但是问题是用于加密解密的key硬编码方式宏定义在了代码中,如何改进?不key显示出现在代码中
  • cocos creator h5开发中采用的XMLHttpRequest,实现了网络协议的数据传输,但是数据的传输是可以在web页面上可以完全看到。对于很多开发者来说,并不想其他人看到这些内容,容易引发对服务器的恶意攻击。 1. 技术...

    cocos creator h5开发中采用的XMLHttpRequest,实现了网络协议的数据传输,但是数据的传输是可以在web页面上可以完全看到。对于很多开发者来说,并不想让其他人看到这些内容,容易引发对服务器的恶意攻击。

    1. 技术栈

        cocos creator 

        AES加密

        XMLHttpRequest

        typeScript

    2.  介绍XMLHttpRequest

       

                // 创建对象
                let xhr = new XMLHttpRequest();
    
                // 设置超时时间
                xhr.timeout = 3000;
    
                // 设置返回数据类型为二进制
                xhr.responseType = "arraybuffer";
    
                // 超时处理
                xhr.ontimeout = () => {
                    
                };
                
                // 报错处理
                xhr.onerror =  () => {
                   
                };
    
                // 请求中端时调用
                xhr.onabort =  () => {
                    Log.error("request onabort");
                    onDone(false, null);
                };
                xhr.onreadystatechange =  () => {
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        var json = JSON.parse(xhr.response);
                        
                        // 数据传输后的成功回调函数
                        onDone(true, json);
                    }
                };
               
                // requestUrl 请求的路由地址url
                xhr.open("POST", requestUrl, true);
    
                // 设置xhr的请求头
                xhr.setRequestHeader('Content-Type', 'application/json');
                
                // send 将数据传出
                xhr.send(encodedStr);

         3. AES加密

    var CryptoJS = require('crypto-js');
    
    // 客户端与服务端协定字段key
    var key = "123456";
    
    // 加密的偏移量
    //var iv = "123456";
    
    // 以上两个字段均自定义value
    
    var Cryptojs = function () { };
    
    // 加密 (此处客户端将数据加密处理传至服务器二进制字段)
    
    Cryptojs.encrypt = function (text) {
        var encryptedData = CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(key), {
            iv: CryptoJS.enc.Utf8.parse(key),
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.ZeroPadding
        })
        // base64 格式
        var encryptedBase64Str = encryptedData.toString();
        // base64 转二进制格式
        return base64toBlob(encryptedBase64Str);
    
        // return encryptedData.ciphertext.toString(); //密文
    }
    
    
    
    // 客户端将处理密文解密, 服务器传回的是二进制数据所以在此我将二进制转为64进制数据
    
    Cryptojs.decryptWeb = function (bytes) {
    
        var base64 = blobToBase64(bytes);
    
        var result = CryptoJS.AES.decrypt(base64, CryptoJS.enc.Utf8.parse(key), {
            iv: CryptoJS.enc.Utf8.parse(key),
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.ZeroPadding
        });
    
        return  result.toString(CryptoJS.enc.Utf8);
    }
    
    // 64转2进制
    function base64toBlob(base64) {
        // 将base64转为Unicode规则编码
        var bString = atob(base64);
        var len = bString.length;
        var arr = new Uint8Array(len);
        while (len--) {
            arr[len] = bString.charCodeAt(len);
        }
        return arr;
    }
    
    // 2转64进制
    function blobToBase64(bytes) {
        var bString = "";
        for (var i = 0, len = bytes.length; i < len; ++i) {
            bString += String.fromCharCode(bytes[i]);
        }
        return btoa(bString);
    }
    
    
    
    
    

    4. 两个文件结合

    处理加密:在xhr.send函数前将传出的数据进行客户端加密,在将数据传输。

    处理解密:在服务器成功返回时解密xhr.response, 将解密数据传入回调函数。

    (注意:服务器返回的数据为二进制,所以要设置xhr的返回数据类型,否则会出现乱码,解密失败。 xhr.responseType = "arraybuffer"。解密是还需在设置数据格式转换。将arraybuffer格式处理为Uint8Array格式 new Uint8Array(xhr.response);

    const decodeStr = decryptWebjs.(new Uint8Array(xhr.response));

    效果:

    展开全文
  •  该网络中立性的死亡和法规对互联网服务供应商如何处理客户的网络流量的松动都提出了许多隐私的担忧。互联网提供商(以及其他通过互联网观看流量的用户)早已拥有一种工具,可以他们轻松监控个人的互联网习惯:...
  • 下面,就我们一层一层抽丝剥茧看看HTTPS到底是如何运行的,以及他到底解决了哪些不安全的问题。 为什么需要加密? 我们都知道http传输的内容是==明文传输==的,明文数据会经过*中间代理服务器*、*路由器*、*...
  • 这种无线设备数字的不断增长,也信息资产受到的潜在威胁在不断增长。  蓝牙如何工作  蓝牙是一个由IEEE 802.15定义的无线网络。为了减少频率的冲突,蓝牙使用2.4MHz的波段进行操作。一个蓝牙连接的吞吐量则视...
  • 本文讲的是如何在Android上发送加密邮件?推荐这四大神器, 在移动网络安全意识增加的时代,大家都希望自己发送消息不被其他人偷窥。无论是公司的机密业务还是个人的敏感数据,都需要被加密。不过说到加密,这可是...
  • 如果买不起 https 证书,又不愿意网站敏感数据在网络中曝露,怎么自己实现一套 https 加密通讯呢?现在大部分网站都采用 https 协议来传输数据,客户端和服务端自动通过证书完成密钥协商和数据加密传输的过程。 ...
  • 当前,网络安全环境日益恶化,如何确保关键信息的数据安全,防范遭受攻击而导致信息泄露,正成为众多政企部门纷纷关注的重点。笔者认为在各种安全防护技术手段中,加密技术不仅是不可或缺的防护关键手段,而且还成为...
  • 来自奥胡斯大学密码学PhD、Datadog机器学习工程师Morten Dahl介绍了如何实现基于加密数据进行训练和预测的卷积神经网络。本文进行概括和总结 工作 使用一个经典CNN模型,使其能够用于基于加密数据进行训练和预测。 ...
  • 据英国《卫报》报道美国硅谷高科技高管与白宫官员为商讨如何防止恐怖分子在线招募“新兵”于上周在加州圣何塞举行了一次网络峰会。苹果公司CEO蒂姆·库克也参加了此次会议并在会议中要求政府官员支持科技公司为保护...
  • 程序员之网络安全系列(三):数据加密之对称加密算法 程序员之网络安全系列(四):数据加密之非对称秘钥 程序员之网络安全系列(五):数字证书以及12306的证书问题 程序员之网络安全系列(六):动态密码 前文...
  • 但是现在有个问题是 数据如何加密,总不能两个人之间说的话第三个人活着别的人听到吧 那最简单的例子就是:A和B之间传递数据,如何保证数据不被第三个人知道,或者说第三个人就算知道数据,但是不...
  • 网络安全日益恶化的今天,各大网站都开始注意到HTTPS(超文本加密传输协议)在安全防护上的技术优势,可是由于各种因素的影响,HTTPS协议的普及仍面临着相当大的挑战。例如,要将一家网站的服务器主机进行HTTPS...
  • 其实IPsec真正能够用户感觉到安全放心的功能并不局限于此,IPsec的功能是相当的强大,今天我们就继续来讨论如何利用IPsec实现身份验证和数据加密的功能。 一般的网络,特别是用户在借用Internet进行数据传输的...
  • 而 Docker 容器则是通过隔离的方式,将文件系 统、进程、设备、网络等资源进行隔离,再对权限、CPU 资源等进行控制,最终容器之间互不影响, 容器无法影响宿主机。容器与宿主机共享内核、文件系统、硬件等资源。 ...
  • WEP 加密的工作原理

    2020-07-09 07:35:44
    无线网络加密就属于这类如安全毯一样的安全措施:您感觉非常放心,而实际上并没有给您带来多少东西。虽然采用有线等效加密(Wired Equivalent Privacy,WEP)总比根本没有加密强,但了解其局限性也很重要,这样您...
  • 在互联网时代,如何保障网络数据安全一直是一个备受关注的话题,对于从事互联网在线零售的企业来说,如何保障消费者的信息安全更是显得十分重要。...这些都离不开网络数据传输加密协议: SSL和TLS。什么是SSL和TLS? ...
  • 在尽情享受无线网络给我们带来方便的同时,无线上网的安全现象也正被越来越多的用户所重视,那么如何才能自己的无线网络拒绝遭遇非法攻击呢?本文下面就从无线网络加密协议出发,来为各位朋友推荐一套非常可行的...
  • 在数据安全日益受到重视的时代,很多个人开发者或小型企业开发的电脑文档加密软件开始大量出现在网络上。对于加密软件,很多企业都知之甚少。很多人认为,公司电脑文件的加密模式是用户登录客户端...如何让员工的办...
  • 这种加密方式固然很好,但是问题就在于如何让双方知道秘钥。因为传输数据都是走的网络,如果将秘钥通过网络的方式传递的话,一旦秘钥被截获就没有加密的意义的。 非对称加密: 有公钥私钥之分,公钥所有人都可以...
  • 其实IPsec真正能够用户感觉到安全放心的功能并不局限于此,IPsec的功能是相当的强大,今天我们就继续来讨论如何利用IPsec实现身份验证和数据加密的功能。 一般的网络,特别是用户在借用Internet 进行数据传输的...
  • Web | 加密算法应用

    2020-06-02 22:42:51
    Web-加密算法应用目录一、接口加密技术1.1 背景简介1.2 数字签名生成步骤1.3 业务数据加密...如果要涉及到传输密钥时,会用到https,这个比较复杂了,其核心就是如何安全的在网络服务端和客户端商量一个密钥。 1.1
  •  下面要说的就是如何让访客登录网站输入密码之后,进行传输更加安全。  在说明这种方法的具体实现方案之前,不得不分析一下普通的解决方案,和目前常用的解决方案。 1.普通方案  一 般的...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 362
精华内容 144
关键字:

如何让网络加密