• 关于

    解密加密md5算法

    的搜索结果

回答

您好, <一>. MD5加密算法: ? ? ? ?消息摘要算法第五版(Message Digest Algorithm),是一种单向加密算法,只能加密、无法解密。然而MD5加密算法已经被中国山东大学王小云教授成功破译,但是在安全性要求不高的场景下,MD5加密算法仍然具有应用价值。 ?1. 创建md5对象:? <pre name="code" class="java">MessageDigest md5 = MessageDigest.getInstance("md5"); ?2. ?进行加密操作:? byte[] cipherData = md5.digest(plainText.getBytes()); ?3. ?将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。? String toHexStr = Integer.toHexString(cipher & 0xff); ?4. 如果该正数小于16(长度为1个字符),前面拼接0占位:确保最后生成的是32位字符串。? builder.append(toHexStr.length() == 1 ? "0" + toHexStr : toHexStr); ?5.?加密转换之后的字符串为:c0bb4f54f1d8b14caf6fe1069e5f93ad? ?6. 完整的MD5算法应用如下所示:? /** * 功能简述: 测试MD5单向加密. * @throws Exception */ @Test public void test01() throws Exception { String plainText = "Hello , world !"; MessageDigest md5 = MessageDigest.getInstance("md5"); byte[] cipherData = md5.digest(plainText.getBytes()); StringBuilder builder = new StringBuilder(); for(byte cipher : cipherData) { String toHexStr = Integer.toHexString(cipher & 0xff); builder.append(toHexStr.length() == 1 ? "0" + toHexStr : toHexStr); } System.out.println(builder.toString()); //c0bb4f54f1d8b14caf6fe1069e5f93ad } ?? <二>. 使用BASE64进行加密/解密: ? ? ? ? 使用BASE64算法通常用作对二进制数据进行加密,加密之后的数据不易被肉眼识别。严格来说,经过BASE64加密的数据其实没有安全性可言,因为它的加密解密算法都是公开的,典型的防菜鸟不防程序猿的呀。?经过标准的BASE64算法加密后的数据,?通常包含/、+、=等特殊符号,不适合作为url参数传递,幸运的是Apache的Commons Codec模块提供了对BASE64的进一步封装。? (参见最后一部分的说明) ?1.?使用BASE64加密:? BASE64Encoder encoder = new BASE64Encoder(); String cipherText = encoder.encode(plainText.getBytes()); ? 2.?使用BASE64解密:? BASE64Decoder decoder = new BASE64Decoder(); plainText = new String(decoder.decodeBuffer(cipherText)); ? 3. 完整代码示例:? /** * 功能简述: 使用BASE64进行双向加密/解密. * @throws Exception */ @Test public void test02() throws Exception { BASE64Encoder encoder = new BASE64Encoder(); BASE64Decoder decoder = new BASE64Decoder(); String plainText = "Hello , world !"; String cipherText = encoder.encode(plainText.getBytes()); System.out.println("cipherText : " + cipherText); //cipherText : SGVsbG8gLCB3b3JsZCAh System.out.println("plainText : " + new String(decoder.decodeBuffer(cipherText))); //plainText : Hello , world ! } ?? <三>. 使用DES对称加密/解密: ? ? ? ? ?数据加密标准算法(Data Encryption Standard),和BASE64最明显的区别就是有一个工作密钥,该密钥既用于加密、也用于解密,并且要求密钥是一个长度至少大于8位的字符串。使用DES加密、解密的核心是确保工作密钥的安全性。 ?1.?根据key生成密钥:? DESKeySpec keySpec = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("des"); SecretKey secretKey = keyFactory.generateSecret(keySpec); ? 2.?加密操作:? Cipher cipher = Cipher.getInstance("des"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom()); byte[] cipherData = cipher.doFinal(plainText.getBytes()); ? 3.?为了便于观察生成的加密数据,使用BASE64再次加密:? String cipherText = new BASE64Encoder().encode(cipherData); ? ? ?生成密文如下:PtRYi3sp7TOR69UrKEIicA==? ? 4.?解密操作:? cipher.init(Cipher.DECRYPT_MODE, secretKey, new SecureRandom()); byte[] plainData = cipher.doFinal(cipherData); String plainText = new String(plainData); ? 5. 完整的代码demo:? /** * 功能简述: 使用DES对称加密/解密. * @throws Exception */ @Test public void test03() throws Exception { String plainText = "Hello , world !"; String key = "12345678"; //要求key至少长度为8个字符 SecureRandom random = new SecureRandom(); DESKeySpec keySpec = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("des"); SecretKey secretKey = keyFactory.generateSecret(keySpec); Cipher cipher = Cipher.getInstance("des"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, random); byte[] cipherData = cipher.doFinal(plainText.getBytes()); System.out.println("cipherText : " + new BASE64Encoder().encode(cipherData)); //PtRYi3sp7TOR69UrKEIicA== cipher.init(Cipher.DECRYPT_MODE, secretKey, random); byte[] plainData = cipher.doFinal(cipherData); System.out.println("plainText : " + new String(plainData)); //Hello , world ! } ?? <四>. 使用RSA非对称加密/解密: ? ? ? ? RSA算法是非对称加密算法的典型代表,既能加密、又能解密。和对称加密算法比如DES的明显区别在于用于加密、解密的密钥是不同的。使用RSA算法,只要密钥足够长(一般要求1024bit),加密的信息是不能被破解的。用户通过https协议访问服务器时,就是使用非对称加密算法进行数据的加密、解密操作的。 ? ? ? ?服务器发送数据给客户端时使用私钥(private key)进行加密,并且使用加密之后的数据和私钥生成数字签名(digital signature)并发送给客户端。客户端接收到服务器发送的数据会使用公钥(public key)对数据来进行解密,并且根据加密数据和公钥验证数字签名的有效性,防止加密数据在传输过程中被第三方进行了修改。 ? ? ? ?客户端发送数据给服务器时使用公钥进行加密,服务器接收到加密数据之后使用私钥进行解密。 ?1.?创建密钥对KeyPair: KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("rsa"); keyPairGenerator.initialize(1024); //密钥长度推荐为1024位. KeyPair keyPair = keyPairGenerator.generateKeyPair(); ? 2.?获取公钥/私钥: PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); ? 3.?服务器数据使用私钥加密: Cipher cipher = Cipher.getInstance("rsa"); cipher.init(Cipher.ENCRYPT_MODE, privateKey, new SecureRandom()); byte[] cipherData = cipher.doFinal(plainText.getBytes()); ? 4.?用户使用公钥解密: cipher.init(Cipher.DECRYPT_MODE, publicKey, new SecureRandom()); byte[] plainData = cipher.doFinal(cipherData); ? 5.?服务器根据私钥和加密数据生成数字签名: Signature signature = Signature.getInstance("MD5withRSA"); signature.initSign(privateKey); signature.update(cipherData); byte[] signData = signature.sign(); ? 6.?用户根据公钥、加密数据验证数据是否被修改过: signature.initVerify(publicKey); signature.update(cipherData); boolean status = signature.verify(signData); ? 7. RSA算法代码demo:<img src="http://www.cxyclub.cn/Upload/Images/2014081321/99A5FC9C0C628374.gif" alt="尴尬" title="尴尬" border="0"> /** * 功能简述: 使用RSA非对称加密/解密. * @throws Exception */ @Test public void test04() throws Exception { String plainText = "Hello , world !"; KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("rsa"); keyPairGenerator.initialize(1024); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); Cipher cipher = Cipher.getInstance("rsa"); SecureRandom random = new SecureRandom(); cipher.init(Cipher.ENCRYPT_MODE, privateKey, random); byte[] cipherData = cipher.doFinal(plainText.getBytes()); System.out.println("cipherText : " + new BASE64Encoder().encode(cipherData)); //gDsJxZM98U2GzHUtUTyZ/Ir/NXqRWKUJkl6olrLYCZHY3RnlF3olkWPZ35Dwz9BMRqaTL3oPuyVq //sehvHExxj9RyrWpIYnYLBSURB1KVUSLMsd/ONFOD0fnJoGtIk+T/+3yybVL8M+RI+HzbE/jdYa/+ //yQ+vHwHqXhuzZ/N8iNg= cipher.init(Cipher.DECRYPT_MODE, publicKey, random); byte[] plainData = cipher.doFinal(cipherData); System.out.println("plainText : " + new String(plainData)); //Hello , world ! Signature signature = Signature.getInstance("MD5withRSA"); signature.initSign(privateKey); signature.update(cipherData); byte[] signData = signature.sign(); System.out.println("signature : " + new BASE64Encoder().encode(signData)); //ADfoeKQn6eEHgLF8ETMXan3TfFO03R5u+cQEWtAQ2lRblLZw1DpzTlJJt1RXjU451I84v3297LhR //co64p6Sq3kVt84wnRsQw5mucZnY+jRZNdXpcbwh2qsh8287NM2hxWqp4OOCf/+vKKXZ3pbJMNT/4 ///t9ewo+KYCWKOgvu5QQ= signature.initVerify(publicKey); signature.update(cipherData); boolean status = signature.verify(signData); System.out.println("status : " + status); //true }
小哇 2019-12-02 01:26:34 0 浏览量 回答数 0

回答

美国数据加密标准(DES)是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合。 RSA是非对称算法,加密密钥和解密密钥是不一样的,或者说不能由其中一个密钥推导出另一个密钥。密钥尺寸大,加解密速度慢,一般用来加密少量数据,比如DES的密钥。 SHA1 和 MD5 是散列算法,将任意大小的数据映射到一个较小的、固定长度的唯一值。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。MD5 比 SHA1 大约快 33%。
琴瑟 2019-12-02 01:27:06 0 浏览量 回答数 0

回答

重新加密一个md5串 更新一下不就行了###### 你要是能改MD5串,那直接重新算一个,然后数据库修改就是。或者找撞算法的网站,MD5反向看看能否找到对应的原文。###### 写个Test,生成一个密码######md5不可逆,真要知道自己原来的密码的话,只能把可能的密码都试一遍吧###### 直接改掉密码或去查MD5撞库数据,即用密文查明文,网上已有这类的网站存储了大量的MD5加密样本。###### 钥匙丢了..那就换锁呀. 直接把数据库里存储的md5改了######简单,常见的密码是可以撞库的######既然密码是md5加密。自己直接md5字符串换掉就行了。###### 既然系统有加密的功能  那登录的时候肯定也是从数据库取出来加密字符串解密然后验证密码正确性的  可以写个test把加密字符串传进去用解密算法解密######登陆是,验证密码,是将输入的字符串加密然后与库中的加密串进行比较。所以,很头疼╭(╯^╰)╮###### 私聊我,我这边买了用彩虹表暴力po'jieMD5的东西
kun坤 2020-06-06 14:06:22 0 浏览量 回答数 0

万券齐发助力企业上云,爆款产品低至2.2折起!

限量神券最高减1000,抢完即止!云服务器ECS新用户首购低至0.95折!

回答

PGP协议。。。。。 电子邮件的方便、快速、费用低廉等优点,再加上它不但能传送文字信息,还可以附上图像、声音等功能,这使得电子邮件越来越受人们的欢迎。 1 电子邮件的传输过程 电子邮件通过SMTP和POP协议来进行发送和接受,但由于互联网的开放性,邮件内容是以明文的形式在互联网上进行传递。这使得人们在使用电子邮件时不得不考虑其安全因素,因此如何保证电子邮件的机密性、完整性、真实性和不可抵赖性等方面的问题显得尤为重要。 2 PGP介绍 为了使电子邮件在互联网上能够安全运行,开发出了一些安全电子邮件标准:PGP和S/MIME。其中PGP被广泛运用。 PGP(Pretty Good Privacy)是美国人Phil Zimmermann研究出来的,它是由多种加密算法(IDEA、RSA、MD5、随机数生成算法)组合而成,不但能够实现邮件的保密功能,还可以对邮件进行数字签名,使收信人能够准确判断邮件在传递过程中是否被非法篡改。 3 PGP工作原理 3.1 IDEA算法 IDEA属于对称加密算法,即加密密钥和解密密钥相同,具体的算法规则是,将输入数据以每64为一块,对每块进行分组,分为4组,每组16位,作为第一轮的输入,进行相乘、相加、异或等运行后,形成4个子分组,将中间两间进行交换,作为下一轮的输入,经过8轮运算后,同样得到4个子分组,再将这4组重新连接到一起形成密文共64位。 3.2 RSA算法 RSA属于非对称加密算法,也称公钥算法,即加密密钥和解密密钥不同,并且加密密钥可以完全公开,但由于没有解密密钥,即使非法者窃取到了密文和发送者的加密密钥也无法查看内容,解决了对称加密中对密钥管理困难的问题,RSA的安全性取决于对大数的因式分解,这是数学上的一个难题。 RSA算法描述: 1)随意选择两个大的质数p和q,p不等于q,q和p保密; 2)计算n=pq; 3)欧拉函数,φ(n) = (p-1)(q-1),n公开,φ(n)保密; 4)选择一个小于φ(n)的正整数e,满足gcd(e,φ(n))=1,e是公开的加密密钥; 5)计算d,满足de≡1(modφ(n)), d是保密的解密密钥; 6)加密变换:对明文m∈Zn,密文为C=me mod n; 7)解密变换:对密文C∈Zn,明文为m=Cd mod n; 由于RSA涉及的运算非常复杂,所以在运算速度上很慢,因而RSA算法只适合于对少量数据进行加密,如数字签名,一般情况下,如果要对大量信息进行加密,还是采用对称加密算法,因为对称加密速度比公钥加密速度快得多。 3.3 MD5算法 MD5属于Hash函数,可以将任意长度的输入压缩到固定长度的输出,具有多对一的单向特性。可以用于数字签名、完整性检测等方面。 4 PGP提供的业务 PGP提供的业务包括:认证、加密、压缩、与电子邮件兼容、基数-64变换。 4.1 认证 认证的步骤是:①发信人创建信息M;②发信人使用MD5算法产生128位的消息摘要H;③发信人用自己的私钥,采用RSA算法对H进行加密ER,M‖ER连接后进行压缩得到Z;④将Z通过互联网发送出去;⑤接收者收到信息后首先进行解压Z-1,使用发信人的公开密钥采用RSA算法进行解密得出H,用接收到的M计算消息摘要H,将得出的两个H进行比较,如果相同则接收,否则表示被篡改,拒绝。 4.2 加密 加密的步骤:发信人对信息M进行压缩,采用IDEA算法对其进行加密,用接收者的公钥对密钥进行加密,与M进行连接后发出,接收者采用RSA算法进行解密得到会话密钥,将会话密钥按IDEA算法进行解密,并解压缩,并到原文。 在加密过程中,由于信息相对内容较多,因此对信息的加密采用的是对称加密算法IDEA来实现,而密钥采用的是安全强度为高的非对称加密算法RSA实现,通过IDEA和RSA结合,不但提高了邮件传输的安全性,而且在加解密时间上也缩短了。 4.3 压缩 PGP采用ZIP算法压缩信息,这不但节省了存储空间,而且在传输过程中也节省了时间,另外,在对信息进行加密之前压缩,也相当于进行了一次变换,使其安全性增强。 4.4 与电子邮件兼容 由于电子邮件只允许使用ASCⅡ字符串,而PGP的输出却是8位串,为了与电子邮件进行兼容,PGP采用基数-64变换实现将输出的8位串转换为可以打印的ASCII字符串。 4.5 PGP消息分段和重组 电子邮件中对消息内容的长度有限制的,当大于所限制的长度时要进行分段,分段是在所有处理结束之后才进行,所以会话密钥和签名在第一个段开始位置出现。在接收端,PGP将重新组合成原来的信息。 5 PGP安全性分析 由于PGP是一种混合密码体系,它的安全性在于IDEA、RSA、MD5算法的安全性分析。 5.1 IDEA的安全性 在PGP中采用IDEA的64位CFB模式,很多研究者对IDEA的弱点进行了分析,但也没有找到破译的方法,由此可见,IDEA算法也是比较安全的,它的攻击方法只有“直接攻击”或者是“密钥穷举”攻击。(原作者:钟泽秀)5.2 RSA的安全性 RSA算法是非对称密码体制,它的安全性基于大整数的素分解的难解性,经过长期的研究至今也未找到一个有效的解决方案,在数学上就是一个难题,因此,RSA公钥密码体制就建立在对大数的因式分解这个数学难题上。 假设密码分析者能够通过n分解因子得到p和q,那么他很容易就可以求出欧拉函数φ(n)和解密密钥d,从而破译RSA,因此,破译RSA比对n进行因式分解难度更大。 假设密码分析者能够不对n进行因子分解就求出欧拉函数φ(n),那么他可以根据de≡1(modφ(n)),得到解密密钥d,从而破译RSA,因为p+q=n-φ(n)+1,p-q=sqr(p+q)^2-4n,所以知道φ(n)和n就可以容易地求得p和q,从而成功地分解n,所以不对n进行因子分解而直接计算φ(n)比对n进行因子分解难度更大。 假如密码分析者能够即不对n进行因子分解也不需要求φ(n)而是直接求得解密密钥d,那么他就可以计算ed-1,其中ed-1是欧拉函数φ(n)的倍数,因为利用φ(n)的倍数可以容易的分解出n的因子。所以,直接计算解密密钥d比对n进行因式分解更难。 虽然n越大其安全性越高,但由于涉及到复杂的数学运算,会影响到运行速度,那么我们实际运用中,如果来决定n的大小使其既安全其速度又不能太慢,目前n的长度为1024位至2048位比较合理。 研究人员建议,在运用RSA算法时,除了指定n的长度外,还应对p和q进行限制:①p和q的大小应该相差不多;②p-1和q-1都应该包含大的素因子;③gcd(p-1,q-1)应该很小。 5.3 MD5的安全性 MD5是在MD4的基础上发展起来的,在PGP中被用来单向变换用户口令和对信息签名的单向散列算法。它的安全性体现在能将任意输入长度的消息转化为固定长度的输出。目前对单向散列的直接攻击包括普通直接攻击和“生日攻击”。 在密码学中,有这么一句话:永远不要低估密码分析者的能力。这也将是密码设计者与密码分析者的较量,事实上绝对不可破译的密码体制在理论上是不存在的,因此,在实际应用中,一个密码体制在使用一段时间后,会换一些新的参数,或者是更换一种新的密码体制,当然,密钥也是要经常换的。由此可见,PGP软件虽然给我们的电子邮件带来了安全性保障,但它也不是永恒的,也许在不久的将来,由于它的弱点被攻击而被新的安全电子邮件产品所代替。
晚来风急 2019-12-02 01:26:46 0 浏览量 回答数 0

回答

公开密钥体系是非对称加密体系. 非对称包含RSA算法. SLL算法是对称加密算法. 如果是SSL是一种安全网络协议. 数字签名一个是保持消息完整性的一个是保持用于表示发送者身份的. 比如一个文件你用MD5签名后.接收方一对比.是那个MD5值说明文件没有被更改. 用发送者的私钥签名则接收方用发送者的公钥解密后还原消息就知道是谁发送的. 对称加密,非对称加密是保持消息机密性和可靠性的 对文件的签名是保持消息的完整性的.
云篆 2019-12-02 01:26:56 0 浏览量 回答数 0

回答

密码学简介 据记载,公元前400年,古希腊人发明了置换密码。1881年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。 随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施 了“美国数据加密标准(DES)”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有DES、RSA、SHA等。随着对加密强度需求的不断提 高,近期又出现了AES、ECC等。 使用密码学可以达到以下目的: 保密性:防止用户的标识或数据被读取。 数据完整性:防止数据被更改。 身份验证:确保数据发自特定的一方。 二. 加密算法介绍 根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。 对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。 非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。 对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。 AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高; AES 2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种侯选算法中选出的一项新的密匙加密标准。 Rijndael被选中成为将来的AES。 Rijndael是在 1999 年下半年,由研究员 Joan Daemen 和 Vincent Rijmen 创建的。AES 正日益成为加密各种形式的电子数据的实际标准。 美国标准与技术研究院 (NIST) 于 2002 年 5 月 26 日制定了新的高级加密标准 (AES) 规范。 算法原理 AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。 AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16 字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相 同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据 AES与3DES的比较 算法名称 算法类型 密钥长度 速度 解密时间(建设机器每秒尝试255个密钥) 资源消耗 AES 对称block密码 128、192、256位 高 1490000亿年 低 3DES 对称feistel密码 112位或168位 低 46亿年 中 非对称算法 常见的非对称加密算法如下: RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的; DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准); ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。 ECC 在1976年,由于对称加密算法已经不能满足需要,Diffie 和Hellman发表了一篇叫《密码学新动向》的文章,介绍了公匙加密的概念,由Rivet、Shamir、Adelman提出了RSA算法。 随着分解大整数方法的进步及完善、计算机速度的提高以及计算机网络的发展,为了保障数据的安全,RSA的密钥需要不断增 加,但是,密钥长度的增加导致了其加解密的速度大为降低,硬件实现也变得越来越难以忍受,这对使用RSA的应用带来了很重的负担,因此需要一种新的算法来 代替RSA。 1985年N.Koblitz和Miller提出将椭圆曲线用于密码算法,根据是有限域上的椭圆曲线上的点群中的离散对数问题ECDLP。ECDLP是比因子分解问题更难的问题,它是指数级的难度。 算法原理——椭圆曲线上的难题 椭圆曲线上离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。 将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,将椭圆曲线中的乘法运算与离散对数中的模幂运算相对应,我们就可以建立基于椭圆曲线的对应的密码体制。 例如,对应Diffie-Hellman公钥系统,我们可以通过如下方式在椭圆曲线上予以实现:在E上选取生成元P,要 求由P产生的群元素足够多,通信双方A和B分别选取a和b,a和b 予以保密,但将aP和bP公开,A和B间通信用的密钥为abP,这是第三者无法得知 的。 对应ELGamal密码系统可以采用如下的方式在椭圆曲线上予以实现: 将明文m嵌入到E上Pm点,选一点B∈E,每一用户都选一整数a,0<a<N,N为阶数已知,a保密,aB公开。欲向A 送m,可送去下面一对数偶:[kB,Pm+k(aAB)],k是随机产生的整数。A可以从kB求得k(aAB)。通过:Pm+k(aAB)- k(aAB)=Pm恢复Pm。同样对应DSA,考虑如下等式: K=kG [其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数] 不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。 这就是椭圆曲线加密算法采用的难题。我们把点G称为基点(base point),k(k<n,n为基点G的阶)称为私有密钥(privte key),K称为公开密钥(public key)。 ECC与RSA的比较 ECC和RSA相比,在许多方面都有对绝对的优势,主要体现在以下方面: Ø 抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。 Ø 计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。 Ø 存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。 Ø 带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。 ECC的这些特点使它必将取代RSA,成为通用的公钥加密算法。比如SET协议的制定者已把它作为下一代SET协议中缺省的公钥密码算法。 下面两张表示是RSA和ECC的安全性和速度的比较: 攻破时间 (MIPS年) RSA/DSA (密钥长度) ECC 密钥长度 RSA/ECC 密钥长度比 104 512 106 5:1 108 768 132 6:1 1011 1024 160 7:1 1020 2048 210 10:1 1078 21000 600 35:1 RSA和ECC安全模长得比较 功能 Security Builder 1.2 BSAFE 3.0 163位ECC(ms) 1,023位RSA(ms) 密钥对生成 3.8 4,708.3 签名 2.1(ECNRA) 228.4 3.0(ECDSA) 认证 9.9(ECNRA) 12.7 10.7(ECDSA) Diffie—Hellman密钥交换 7.3 1,654.0 RSA和ECC速度比较 散列算法 散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结 果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有 相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。 单向散列函数一般用于产生消息摘要,密钥加密等,常见的有: Ø MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法。 Ø SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值; SHA-1 在1993年,安全散列算法(SHA)由美国国家标准和技术协会(NIST)提出,并作为联邦信息处理标准(FIPS PUB 180)公布;1995年又发布了一个修订版FIPS PUB 180-1,通常称之为SHA-1。SHA-1是基于MD4算法的,并且它的设计在很大程度上是模仿MD4的。现在已成为公认的最安全的散列算法之一,并 被广泛使用。 算法原理 SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。 单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码 的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或 信息摘要的输出。 该算法输入报文的最大长度不超过264位,产生的输出是一个160位的报文摘要。输入是按512 位的分组进行处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。 通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的 明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表 示明文未被改动,如果不一致表示明文已被篡改。 MAC (信息认证代码)就是一个散列结果,其中部分输入信息是密码,只有知道这个密码的参与者才能再次计算和验证MAC码的合法性。MAC的产生参见下图。 输入信息 密码 散列函数 信息认证代码 SHA-1与MD5的比较 因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同: Ø 对强行供给的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2128数量级的操作,而对SHA-1则是2160数量级的操作。这样,SHA-1对强行攻击有更大的强度。 Ø 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。 Ø 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。 对称与非对称算法比较 以上综述了两种加密方法的原理,总体来说主要有下面几个方面的不同: Ø 在管理方面:公钥密码算法只需要较少的资源就可以实现目的,在密钥的分配上,两者之间相差一个指数级别(一个是n一个是n2)。所以私钥密码算法不适应广域网的使用,而且更重要的一点是它不支持数字签名。 Ø 在安全方面:由于公钥密码算法基于未解决的数学难题,在破解上几乎不可能。对于私钥密码算法,到了AES虽说从理论来说是不可能破解的,但从计算机的发展角度来看。公钥更具有优越性。 Ø 从速度上来看:AES的软件实现速度已经达到了每秒数兆或数十兆比特。是公钥的100倍,如果用硬件来实现的话这个比值将扩大到1000倍。 三. 加密算法的选择 前面的章节已经介绍了对称解密算法和非对称加密算法,有很多人疑惑:那我们在实际使用的过程中究竟该使用哪一种比较好呢。 我们应该根据自己的使用特点来确定,由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。 对称加密算法不能实现签名,因此签名只能非对称算法。 由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。 在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。 如果在选定了加密算法后,那采用多少位的密钥呢。一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。 四. 密码学在现代的应用 随着密码学商业应用的普及,公钥密码学受到前所未有的重视。除传统的密码应用系统外,PKI系统以公钥密码技术为主,提供加密、签名、认证、密钥管理、分配等功能。 保密通信:保密通信是密码学产生的动因。使用公私钥密码体制进行保密通信时,信息接收者只有知道对应的密钥才可以解密该信息。 数字签名:数字签名技术可以代替传统的手写签名,而且从安全的角度考虑,数字签名具有很好的防伪造功能。在政府机关、军事领域、商业领域有广泛的应用环境。 秘密共享:秘密共享技术是指将一个秘密信息利用密码技术分拆成n个称为共享因子的信息,分发给n个成员,只有 k(k≤n)个合法成员的共享因子才可以恢复该秘密信息,其中任何一个或m(m≤k)个成员合作都不知道该秘密信息。利用秘密共享技术可以控制任何需要多 个人共同控制的秘密信息、命令等。 认证功能:在公开的信道上进行敏感信息的传输,采用签名技术实现对消息的真实性、完整性进行验证,通过验证公钥证书实现对通信主体的身份验证。 密钥管理:密钥是保密系统中更为脆弱而重要的环节,公钥密码体制是解决密钥管理工作的有力工具;利用公钥密码体制进行密钥协商和产生,保密通信双方不需要事先共享秘密信息;利用公钥密码体制进行密钥分发、保护、密钥托管、密钥恢复等。 基于公钥密码体制可以实现以上通用功能以外,还可以设计实现以下的系统:安全电子商务系统、电子现金系统、电子选举系统、电子招投标系统、电子彩票系统等。 公钥密码体制的产生是密码学由传统的政府、军事等应用领域走向商用、民用的基础,同时互联网、电子商务的发展为密码学的发展开辟了更为广阔的前景。 五. 加密算法的未来 随着计算方法的改进,计算机运行速度的加快,网络的发展,越来越多的算法被破解。 在2004年国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做的破译MD5、HAVAL-128、MD4和RIPEMD算法的报告,令在场的国际顶尖密码学专家都为之震惊,意味着这些算法将从应用中淘汰。随后,SHA-1也被宣告被破解。 历史上有三次对DES有影响的攻击实验。1997年,利用当时各国 7万台计算机,历时96天破解了DES的密钥。1998年,电子边境基金会 (EFF)用25万美元制造的专用计算机,用56小时破解了DES的密钥。1999年,EFF用22小时15分完成了破解工作。因此。曾经有过卓越贡献的 DES也不能满足我们日益增长的需求了。 最近,一组研究人员成功的把一个512位的整数分解因子,宣告了RSA的破解。 我们说数据的安全是相对的,可以说在一定时期一定条件下是安全的,随着硬件和网络的发展,或者是另一个王小云的出现,目前的常用加密算法都有可能在 短时间内被破解,那时我们不得不使用更长的密钥或更加先进的算法,才能保证数据的安全,因此加密算法依然需要不断发展和完善,提供更高的加密安全强度和运 算速度。 纵观这两种算法一个从DES到3DES再到AES,一个从RSA到ECC。其发展角度无不是从密钥的简单性,成本的低廉性,管理的简易性,算法的复 杂性,保密的安全性以及计算的快速性这几个方面去考虑。因此,未来算法的发展也必定是从这几个角度出发的,而且在实际操作中往往把这两种算法结合起来,也 需将来一种集两种算法优点于一身的新型算法将会出现,到那个时候,电子商务的实现必将更加的快捷和安全。
liujae 2019-12-02 01:26:38 0 浏览量 回答数 0

回答

加密算法 加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密)。加密技术的要点是加密算法,加密算法可以分为对称加密、不对称加密和不可逆加密三类算法。 对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。 不对称加密算法不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。 不可逆加密算法 不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码”也就是输入的明文。不可逆加密算法不存在密钥保管和分发问题,非常适合在分布式网络系统上使用,但因加密计算复杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛应用在计算机系统中的口令加密,利用的就是不可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用领域正在逐渐增大。在计算机网络中应用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等。 加密技术 加密算法是加密技术的基础,任何一种成熟的加密技术都是建立多种加密算法组合,或者加密算法和其他应用软件有机结合的基础之上的。下面我们介绍几种在计算机网络应用领域广泛应用的加密技术。 非否认(Non-repudiation)技术 该技术的核心是不对称加密算法的公钥技术,通过产生一个与用户认证数据有关的数字签名来完成。当用户执行某一交易时,这种签名能够保证用户今后无法否认该交易发生的事实。由于非否认技术的操作过程简单,而且直接包含在用户的某类正常的电子交易中,因而成为当前用户进行电子商务、取得商务信任的重要保证。 PGP(Pretty Good Privacy)技术 PGP技术是一个基于不对称加密算法RSA公钥体系的邮件加密技术,也是一种操作简单、使用方便、普及程度较高的加密软件。PGP技术不但可以对电子邮件加密,防止非授权者阅读信件;还能对电子邮件附加数字签名,使收信人能明确了解发信人的真实身份;也可以在不需要通过任何保密渠道传递密钥的情况下,使人们安全地进行保密通信。PGP技术创造性地把RSA不对称加密算法的方便性和传统加密体系结合起来,在数字签名和密钥认证管理机制方面采用了无缝结合的巧妙设计,使其几乎成为最为流行的公钥加密软件包。 数字签名(Digital Signature)技术 数字签名技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。在公钥与私钥管理方面,数字签名应用与加密邮件PGP技术正好相反。在数字签名应用中,发送者的公钥可以很方便地得到,但他的私钥则需要严格保密。 PKI(Public Key Infrastructure)技术 PKI技术是一种以不对称加密技术为核心、可以为网络提供安全服务的公钥基础设施。PKI技术最初主要应用在Internet环境中,为复杂的互联网系统提供统一的身份认证、数据加密和完整性保障机制。由于PKI技术在网络安全领域所表现出的巨大优势,因而受到银行、证券、政府等核心应用系统的青睐。PKI技术既是信息安全技术的核心,也是电子商务的关键和基础技术。由于通过网络进行的电子商务、电子政务等活动缺少物理接触,因而使得利用电子方式验证信任关系变得至关重要,PKI技术恰好能够有效解决电子商务应用中的机密性、真实性、完整性、不可否认性和存取控制等安全问题。一个实用的PKI体系还必须充分考虑互操作性和可扩展性。PKI体系所包含的认证中心(CA)、注册中心(RA)、策略管理、密钥与证书管理、密钥备份与恢复、撤销系统等功能模块应该有机地结合在一起。 加密的未来趋势 尽管双钥密码体制比单钥密码体制更为可靠,但由于计算过于复杂,双钥密码体制在进行大信息量通信时,加密速率仅为单钥体制的1/100,甚至是 1/1000。正是由于不同体制的加密算法各有所长,所以在今后相当长的一段时期内,各类加密体制将会共同发展。而在由IBM等公司于1996年联合推出的用于电子商务的协议标准SET(Secure Electronic Transaction)中和1992年由多国联合开发的PGP技术中,均采用了包含单钥密码、双钥密码、单向杂凑算法和随机数生成算法在内的混合密码系统的动向来看,这似乎从一个侧面展示了今后密码技术应用的未来。 在单钥密码领域,一次一密被认为是最为可靠的机制,但是由于流密码体制中的密钥流生成器在算法上未能突破有限循环,故一直未被广泛应用。如果找到一个在算法上接近无限循环的密钥流生成器,该体制将会有一个质的飞跃。近年来,混沌学理论的研究给在这一方向产生突破带来了曙光。此外,充满生气的量子密码被认为是一个潜在的发展方向,因为它是基于光学和量子力学理论的。该理论对于在光纤通信中加强信息安全、对付拥有量子计算能力的破译无疑是一种理想的解决方法。 由于电子商务等民用系统的应用需求,认证加密算法也将有较大发展。此外,在传统密码体制中,还将会产生类似于IDEA这样的新成员,新成员的一个主要特征就是在算法上有创新和突破,而不仅仅是对传统算法进行修正或改进。密码学是一个正在不断发展的年轻学科,任何未被认识的加/解密机制都有可能在其中占有一席之地。 目前,对信息系统或电子邮件的安全问题,还没有一个非常有效的解决方案,其主要原因是由于互联网固有的异构性,没有一个单一的信任机构可以满足互联网全程异构性的所有需要,也没有一个单一的协议能够适用于互联网全程异构性的所有情况。解决的办法只有依靠软件代理了,即采用软件代理来自动管理用户所持有的证书(即用户所属的信任结构)以及用户所有的行为。每当用户要发送一则消息或一封电子邮件时,代理就会自动与对方的代理协商,找出一个共同信任的机构或一个通用协议来进行通信。在互联网环境中,下一代的安全信息系统会自动为用户发送加密邮件,同样当用户要向某人发送电子邮件时,用户的本地代理首先将与对方的代理交互,协商一个适合双方的认证机构。当然,电子邮件也需要不同的技术支持,因为电子邮件不是端到端的通信,而是通过多个中间机构把电子邮件分程传递到各自的通信机器上,最后到达目的地。
一键天涯 2019-12-02 01:26:21 0 浏览量 回答数 0

回答

看代码了。不要太高估码农的智商了。比如如果是PHP开源软件,基本都是MD5揉来揉去,如果是.NET开源软件,基本都是DES揉来揉去。 99%的加密就是base64,md5,rc4,des3等揉来揉去,其中90%的加密是MD5散列做的,就是加一点切一点。 ######回复 @blu10ph : 你说的没错。但是,绝大部分开源软件的作者水平没这么高,尤其是业务软件,就是我说的拿几个最简单最常见的揉来揉去,加点盐,掐头去尾什么的。你以为他们懂什么椭圆双曲线加密,什么SHA3最新一代散列?######加密还分可逆和不可逆,对称不对称######老大果然是老大,”揉“用得非常之精妙。###### md5 ###### 你没有把明文贴出来,谁能猜得到? ######根据你的要求,提供了4对明文密文,呵呵######一定不是MD5###### 你这个密文长度都不固定,怎么确定呀。反正肯定不是MD5,好像也不是DES。或者有两种加密算法。因为第四段密文长度和其他不一样。 ######长度问题,你可能想复杂了######呵呵,楼主就少换了个行,你们就以为有一行长度不一致?看上去离MD5不远,至少最后一步是MD5的16位加密。######那一行长的 确实就是那么长啊###### md5 ######呵呵,说的对哦 我补充了几组明文密文组 能帮我看看算法吗?######回复 @婕仪伟琪 : 这个网站确实能通过密文反查到MD5等加密数据。我用过几次。你可以去看看.www.cmd5.com。并且从这个网站你可以看到,光摘要算法,就有十几二十种,更不用说对称,非对称算法了。而且,比如对称算法,只要明文不同,即使密钥相同,算出来的密文也完全不同。加密解密有三要素(明文,密钥,算法),才能算出密文,你只给出一串无意义的密文,神仙也推不出算法或者明文来。######MD5###### ######所以你不给出一条明文或密钥,根本不能判断是什么算法加密出来的。######在原问题上补充了4对明文密文,呵呵
kun坤 2020-06-03 14:04:23 0 浏览量 回答数 0

问题

C#语法问答合集

有了c#基础 如何能快速成长起来https://yq.aliyun.com/ask/171327求c# 具体的 3des双倍加密算法 跪求~~~https://yq.aliyun.com/ask/175551VS2008 C# 在实现ID3...
马铭芳 2019-12-01 20:19:13 2476 浏览量 回答数 1

回答

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n及e1),(n及e2)就是密钥对。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n; 补充回答: 对明文进行加密,有两种情况需要这样作: 1、您向朋友传送加密数据,您希望只有您的朋友可以解密,这样的话,您需要首先获取您朋友的密钥对中公开的那一个密钥,e及n。然后用这个密钥进行加密,这样密文只有您的朋友可以解密,因为对应的私钥只有您朋友拥有。 2、您向朋友传送一段数据附加您的数字签名,您需要对您的数据进行MD5之类的运算以取得数据的"指纹",再对"指纹"进行加密,加密将使用您自己的密钥对中的不公开的私钥。您的朋友收到数据后,用同样的运算获得数据指纹,再用您的公钥对加密指纹进行解密,比较解密结果与他自己计算出来的指纹是否一致,即可确定数据是否的确是您发送的、以及在传输过程中是否被篡改。 密钥的获得,通常由某个机构颁发(如CA中心),当然也可以由您自己创建密钥,但这样作,您的密钥并不具有权威性。 计算方面,按公式计算就行了,如果您的加密强度为1024位,则结果会在有效数据前面补0以补齐不足的位数。补入的0并不影响解密运算。
玄学酱 2019-12-02 01:26:59 0 浏览量 回答数 0

回答

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n及e1),(n及e2)就是密钥对。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n; 补充回答: 对明文进行加密,有两种情况需要这样作: 1、您向朋友传送加密数据,您希望只有您的朋友可以解密,这样的话,您需要首先获取您朋友的密钥对中公开的那一个密钥,e及n。然后用这个密钥进行加密,这样密文只有您的朋友可以解密,因为对应的私钥只有您朋友拥有。 2、您向朋友传送一段数据附加您的数字签名,您需要对您的数据进行MD5之类的运算以取得数据的"指纹",再对"指纹"进行加密,加密将使用您自己的密钥对中的不公开的私钥。您的朋友收到数据后,用同样的运算获得数据指纹,再用您的公钥对加密指纹进行解密,比较解密结果与他自己计算出来的指纹是否一致,即可确定数据是否的确是您发送的、以及在传输过程中是否被篡改。 密钥的获得,通常由某个机构颁发(如CA中心),当然也可以由您自己创建密钥,但这样作,您的密钥并不具有权威性。 计算方面,按公式计算就行了,如果您的加密强度为1024位,则结果会在有效数据前面补0以补齐不足的位数。补入的0并不影响解密运算。
沉默术士 2019-12-02 01:26:34 0 浏览量 回答数 0

回答

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n及e1),(n及e2)就是密钥对。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n; 补充回答: 对明文进行加密,有两种情况需要这样作: 1、您向朋友传送加密数据,您希望只有您的朋友可以解密,这样的话,您需要首先获取您朋友的密钥对中公开的那一个密钥,e及n。然后用这个密钥进行加密,这样密文只有您的朋友可以解密,因为对应的私钥只有您朋友拥有。 2、您向朋友传送一段数据附加您的数字签名,您需要对您的数据进行MD5之类的运算以取得数据的"指纹",再对"指纹"进行加密,加密将使用您自己的密钥对中的不公开的私钥。您的朋友收到数据后,用同样的运算获得数据指纹,再用您的公钥对加密指纹进行解密,比较解密结果与他自己计算出来的指纹是否一致,即可确定数据是否的确是您发送的、以及在传输过程中是否被篡改。 密钥的获得,通常由某个机构颁发(如CA中心),当然也可以由您自己创建密钥,但这样作,您的密钥并不具有权威性。 计算方面,按公式计算就行了,如果您的加密强度为1024位,则结果会在有效数据前面补0以补齐不足的位数。补入的0并不影响解密运算。
管理贝贝 2019-12-02 01:27:21 0 浏览量 回答数 0

回答

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n及e1),(n及e2)就是密钥对。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即: A=B^e2 mod n;B=A^e1 mod n; 补充回答: 对明文进行加密,有两种情况需要这样作: 1、您向朋友传送加密数据,您希望只有您的朋友可以解密,这样的话,您需要首先获取您朋友的密钥对中公开的那一个密钥,e及n。然后用这个密钥进行加密,这样密文只有您的朋友可以解密,因为对应的私钥只有您朋友拥有。 2、您向朋友传送一段数据附加您的数字签名,您需要对您的数据进行MD5之类的运算以取得数据的"指纹",再对"指纹"进行加密,加密将使用您自己的密钥对中的不公开的私钥。您的朋友收到数据后,用同样的运算获得数据指纹,再用您的公钥对加密指纹进行解密,比较解密结果与他自己计算出来的指纹是否一致,即可确定数据是否的确是您发送的、以及在传输过程中是否被篡改。 密钥的获得,通常由某个机构颁发(如CA中心),当然也可以由您自己创建密钥,但这样作,您的密钥并不具有权威性。 计算方面,按公式计算就行了,如果您的加密强度为1024位,则结果会在有效数据前面补0以补齐不足的位数。补入的0并不影响解密运算。 复制过来的····
云篆 2019-12-02 01:26:22 0 浏览量 回答数 0

回答

加密解密的技术: 对称加密 加密方和解密方使用是同一个密钥,加密解密的速度都很快,先将数据明文 分成数据块儿,一般来讲是大小相同的,如果到最后剩下的不能与其他数据块儿的 大小相同,那么就给它添加一些填充物,然后对每个数据块儿逐个加密, 然后把加密后的数据块儿发给对方,每一次管理一块儿, 但是,加密后的块儿怎么处理,因为每一个块儿都是单独处理,对方在破解数据时 每一块儿独立破解,也就是说这样的加密过程对反破解并没有任何帮助, 对于加密以后的数据块儿的处理有以下两种方法 ECB:每一块儿单独加密,加密一个传递一个, CBC:加密或密文块儿链,通过抑或运算实现,每一个数据块儿,在发送给对方 之前会实现将此数据块儿与此前的数据块儿做一次抑或运算,并把结果发送给对方 所以得不到第一个块儿,得到其他也就没有用,即使是第一块,也会和一个随机数 进行抑或运算 其最大好处在于,做两次抑或运算后可以将数据还原 算法:DES:数据加密标准,使用56位的密钥长度 AES:高级加密标准,可以使用128、192、256三种长度的密钥 3DES:对原有加密3次, Blowfish Twofish RC6 IDEA CAST5 缺陷:1、一个人跟众多对象通信的时候需要记的密码过多 2、密钥分发困难,是最大的难题,没有一种可靠的手段将密钥送给一个 没有见过面的对象 非对称加密 公钥加密算法:DSA,RSA,EIGamal 加密方和解密方使用不同的密钥 功能:加密解密 用户的身份认证,RSA两者都可以实现,而DSA只能加密数据 公钥,私钥 公钥是从私钥中抽出的一段特征,公钥隐含在私钥中 现在主流的密钥长度是2048 缺陷:1、加密速度慢,比对称加密慢3个数量级 1000倍,一个数量级10倍 2、公钥加密一般不用于加密数据,主要用于实现用户认证,数据加密 主要是通过对称加密实现的 如何实现用户认证: 现在假设,有两个通信的对象,一个较小黑,一个较小白,现在小黑给小白发了 一封电子邮件,但是,小白在接受邮件的时候不希望自己的邮件的内容被篡改, 这时小黑就将邮件内容加密且说自己是小黑,并产生一个公钥和一个私钥, 私钥小黑会随身携带 而且不能外泄,公钥则连同邮件一起发给小白,这是小白拿着小黑的公钥如果能够 解密,则说明小黑就是小黑...这就实现了认证,但是如果小黑加密的数据很大,再加上 公钥加密要用很久时间,等加密好,小黑也无语了,所以小黑加密的不是数据 而是这段数据的特征值,说到特征值,下面就说一下单向加密》》》 单向加密 雪崩效应:输入的数据有一点点不同,结果会有巨大不同,主要目的在防暴力破解 单向加密就是去计算一段数据的特征值,加密过程是不可逆的,是去计算一段数据的特征码,是独一无二的,用于对 数据完整性的校验 无论你输入的数据是多长,输出的结果都是一样长度 MD5:message digest,输出结果固定长度128bit SHA1:secure hash algorithm安全的哈希算法,输出结果固定长度160bit 身份认证: 单向加密在实现用户身份认证的时候不会去加密整段数据,而是先去计算这段数据的特征值, 把它的特征值用私钥加密,加密以后附着在数据后面,一起发给对方,在对方收到以后,对方 可以验证两方面的内容,第一用户的身份,第二数据的完整性,接收方先用发送方的公钥对其解密 如果能解密就验证了对方了身份,此时接收方会获得这段数据的特征值,然后接收方也用相同的 算法进行运算,得到一个数据的特征值,如果这两个特征值相同,则说明数据在发送过程完好无损 如果不相同,则说明数据有改动 假设还是小黑和小白通信,双方都希望在数据的发送过程中,既能实现用户身份验证, 又能实现数据加密,还能实现数据的完整性,那该怎么办呢。 现在小黑在发送数据前,先将数据用单向加密,计算出特征值,然后再用私钥解密将特征值加密 接下来会再用产生一个一次性的密码,用小白的公钥将这个密码加密然后放在数据后,最后再用对称加密 将全部加密,这时就是密文了,到了小白那里以后,小白先用自己的私钥拿到那个密码,然后再用那个 密码解密,获得数据的特征值,然后再用单向解密计算出一个特征值,如果这两个值相同,则说明 数据完好,以上过程就实现了三重验证 这三项结合起来是现在电子商务的基础。 可以实现这整个过的工具: opssh gpg 但是这两个过程还存在问题,小白怎样去获得小黑的公钥呢。在传输公钥的时候也有可能 出现欺骗,这怎么解决了。 IKE:互联网密钥交换,实现双方使眼色交换密钥,和密钥本身不在互联网上 传播 PKI:公钥基础设施,或公钥基础架构,CA证书颁发机构,证书内放的就是通信人的公钥信息 怎样基于证书通信: 双方在通信时都出示证件,这个证件由某个权威机构发放,只要验证证件内的有效信息 就可以验证对方的身份,但是在发证的时候怎样防止中间出现欺骗呢。 这又是一个鸡生蛋,蛋生鸡的问题,想想该如何解决呢。 所以一些操作系统在安装时就已经将一些权威的发证机构的证书放在你的电脑里了,这样在一定程度 上可以解决一些问题 证书的格式:X509,PKCS 证书废弃列表:CRL 最常见的攻击“man in the middle”主要是双方身份无法验证 会话劫持, 数据插入, 数据篡改, 这些都是常见的威胁 加密解密用于: 1、用户密码/数据嗅探 password/data sniffing 2、数据操纵,data manipulation 3、authentication manipulation 认证 4、equivalent to mailing on postcards 这几个方面 加密算法的基本法则:kerckhoff's principle 1、一般来讲加密本身并不靠算法,算法固然很关键能将明文变成密文 但是一项真正的加密过程,你的数据是否会被破解,主要不能过强依赖于算法本身, 而要依赖于密码,算法的研究周期很长,更改一个密码很简单,但是更换一个算法就麻烦了 算法需要耗费很多精力,只要算法不公开,就无从下手破解 2、电子商务的过程中不仅要保证数据加密,还要保证不被别人看见 算法: 1、随机数来源靠得住
行者武松 2019-12-02 01:26:47 0 浏览量 回答数 0

回答

MD5你怎么解? ######回复 @cyzshenzhen : 你想得太天真了, 32位是md5可以理解, 但你理解不了的是它是几层md5.######google、百度,MD5解密。虽然不是真正的解密,但实际上也是一个非常完整的库,如果可以的话,直接引用他们的库就够了###### 怎么能一样呢,你去看看腾讯微博的登录吧,是MD5加密,关键是salt是在服务器端生成的,每次都不一样。要破解,难度很大。 等你破解好,早就失效了。 ######回复 @cyzshenzhen : 但是salt是动态获取的,而且有有效期######不是在js端加密的吗?######MD5加密后,就目前技术来说还是不能够解密的。网上所谓的能够MD5解密,不过是搜集了一些MD5的散列存储于数据库中,根据MD5散列来寻找字符串以寻找解密,如果数据库中没有搜集有相应的散列就不能够解密了。但是这个库肯定不是你说的一个非常完整的库。######回复 @彭坤 : 不是破解,而是碰撞######回复 @leo108 : MD5是单向的,能破解?反正目前所知的所谓的破解都是穷举出来的,比谁的库大而已。######回复 @szkiti : 百度王小云######回复 @leo108 : 已经有解? 是MD5已经被破解了吗? 哪来的内部消息啊? 表示好奇。######已经有解了,只不过没公开而已###### 明文就肯定不是安全的。MD5有什么用?你都截获md5后的字符串了,根本不用关心密码原文是什么,直接post这个字符串就可以进行欺骗了。 ######js加密之前先跟服务器要一个salt,然后js端用这个salt加密,sever端从数据库拿出password后也用同一个salt加密,这个salt用一次就在server端被失效,就算这次请求被截断,造成这个salt没在server端被强制失效,它还有一个有效期,可以过期自动失效。也就是说,同样的密码,每次发出去的MD5串是不一样的,所以你截获这次的MD5串,用于下一次登录是无效的。######大哥,你知道加密后的字符串有什么用? 进行密码认证的时候,是将传递的字符串进行加密然后,再跟数据库或ldap中存储的加密值进行比对。 你传递的是加密后的字符串,然后经过人家验证前的再加密,值就不一样了。。。。。。######回复 @leo108 : 恩恩,我以为你说的是拿到密码和数据库直接比对。接楼上的话,没有https保护的都是在裸奔!:)######回复 @hanzhankang : 呵呵,看8楼你就知道天真的是你######回复 @littledoo : 在前段的md5仅仅是第一次,在服务器端还会进行的,而且还会加盐。说服了没?###### 引用来自“littledoo”的答案 明文就肯定不是安全的。MD5有什么用?你都截获md5后的字符串了,根本不用关心密码原文是什么,直接post这个字符串就可以进行欺骗了。 关键是你怎么截获,你能截获到我和我QQ上的谁在聊什么吗?跨网段截获可不是那么容易的 ######回复 @leo108 : 客户端MD5还能一定程度加大你机器人模拟登陆的难度,从多个方面制造困难######既然排除了局域网截获,那明文提交和md5之后再提交已经没有区别了######回复 @littledoo : 局域网内截包谁不会,你来截下我的包试试,你要是能截到,你就牛了。 另外,QQ消息是加密的,而且是XXTEA 加密算法。######截包不是什么很大工程。qq消息是加过密的。不是明文,补习下网络知识吧。######不使用ssl的登录都是在裸奔。######楼主分清楚MD5是 散列算法不是加密算法###### 根据4楼说的,拿到JS进行MD5加密的串。我们直接利用账号+加密后的密码,直接提交的话,不管服务端到底加了多少“盐”,应该都没用吧? 这个过程哪里有问题吗? ######当然有问题. 服务端会发个salt给浏览器做js进行md5加密,这个salt是变动的2分钟有效, 你下次直接提交这个md5串是没有用的.######不是简单做一个MD5,我在这篇文章里详细展开了,推荐阅读:http://my.oschina.net/u/588200/blog/151377######那不就可以直接“做事”了吗。 假设有人能够截获到提交的信息。那我拿到的这个MD5加密的串,跟拿到明文的串,有什么区别######没有一点问题!######只是知道加密方式而已,跟明文还差的比较多的。而现在一般的网站大多数都采用MD5加密,有些甚至二层加密,纯粹知道加密方式,对破解意义不大。###### md5(md5(pass,time()),time()); 返回值是32位, 可你要拿这上数据库找, 估计得上4TB, 数学次方, 思考一下吧, 少年. 直接拿md5值传输过去? 醒醒吧, ip, 来路,session表示你还是少年. ######回复 @cyzshenzhen : 你讲这些都是在你已知的条件下, 比如QQ的聊天记录, QQ会提示你数据不是在一个ip下提交的? 你太天真了, QQ不会提示你任何信息, 你慢慢去猜想吧.######ip这个,顶多会提示“登录不在常用地址”而已。提交方式,上网搜一下,都是模拟xxx浏览器提交
kun坤 2020-06-08 11:24:51 0 浏览量 回答数 0

回答

先说一些基础的东东吧,加密和解密是为了信息在传递过程中被他人知晓,对明文所做的混淆,看你举的这个场景,我感觉你对加密这一套的理解还有些欠缺。再多在网上学习一下吧。不过大体上也可以回答你的两个问题。 Q:比如一个系统我要加密用户密码,是不是我整个系统只需要一对公匙私匙?还是每个密码要一对 A: 不管是对称加密算法如AES的密钥(一个)还是非对称加密算法RSA的密钥(一对), 当然只需要一个(一对),要多个也没有意义,因为一个(一对)已经安全了哈。 Q: 然后数据库是保持加密得到的byte二进制数组吗还是保存什么,时应该前台页面用公匙把密码加密吗? A: 当然是保存密文,反正看起来是乱码,当然你理解成BYTE数组也行。因为你选的是RSA一对密钥,所以你任选一个来加密,另一个解密就行了。 ######非常感谢######保存密码请用单向散列函数,不要用任何可逆算法,即使被爆库也拿不到明文。RSA主要的作用是防止消息被篡改,具体应用可以百度,存密码侧重的是防止明文暴露。######这个场景只是举例,主要是后面那几个问题啊。求大神指点指点######你的应用场景用散列就行,没必要可逆。 ######这个场景只是举例,主要是后面那几个问题啊。求大神指点######系统用户的加密是用的是MD5加密,然后存入数据库,用户登录的时候就将用户输入的密码MD5加密然后和数据库的数据比对,如果相同就登录成功######像 散列(HASH)这种映射算法,仅仅是为了不明文保存数据而已,是不可逆的,不能从密文(映射值)中还原出明文。所以它也不应该归为加密算法一类。 ######密码用 md5 处理是绝对错误的,应该用 bcrypt 或者 scrypt ######绝对。即使加 salt 的 md5 也是极度不可靠的。 建议使用 bcrypt,用得很广。scrypt 更强,但相关的密码学分析还不多。######这么绝对么。。 你说那两种我都没接触过。
kun坤 2020-06-03 11:21:02 0 浏览量 回答数 0

回答

HTTPS基本原理 一、http为什么不安全。 http协议没有任何的加密以及身份验证的机制,非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。 国外很多网站都支持了全站https,国内方面目前百度已经在年初完成了搜索的全站https,其他大型的网站也在跟进中,百度最先完成全站https的最大原因就是百度作为国内最大的流量入口,劫持也必然是首当其冲的,造成的有形的和无形的损失也就越大。关于流量劫持问题,我在另一篇文章中也有提到,基本上是互联网企业的共同难题,https也是目前公认的比较好的解决方法。但是https也会带来很多性能以及访问速度上的牺牲,很多互联网公司在做大的时候都会遇到这个问题:https成本高,速度又慢,规模小的时候在涉及到登录和交易用上就够了,做大以后遇到信息泄露和劫持,想整体换,代价又很高。 2、https如何保证安全 要解决上面的问题,就要引入加密以及身份验证的机制。 这时我们引入了非对称加密的概念,我们知道非对称加密如果是公钥加密的数据私钥才能解密,所以我只要把公钥发给你,你就可以用这个公钥来加密未来我们进行数据交换的秘钥,发给我时,即使中间的人截取了信息,也无法解密,因为私钥在我这里,只有我才能解密,我拿到你的信息后用私钥解密后拿到加密数据用的对称秘钥,通过这个对称密钥来进行后续的数据加密。除此之外,非对称加密可以很好的管理秘钥,保证每次数据加密的对称密钥都是不相同的。 但是这样似乎还不够,如果中间人在收到我的给你公钥后并没有发给你,而是自己伪造了一个公钥发给你,这是你把对称密钥用这个公钥加密发回经过中间人,他可以用私钥解密并拿到对称密钥,此时他在把此对称密钥用我的公钥加密发回给我,这样中间人就拿到了对称密钥,可以解密传输的数据了。为了解决此问题,我们引入了数字证书的概念。我首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给我,此时我就不是简单的把公钥给你,而是给你一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是我给你的。 所以综合以上三点: 非对称加密算法(公钥和私钥)交换秘钥 + 数字证书验证身份(验证公钥是否是伪造的) + 利用秘钥对称加密算法加密数据 = 安全 3、https协议简介 为什么是协议简介呢。因为https涉及的东西实在太多了,尤其是一些加密算法,非常的复杂,对于这些算法面的东西就不去深入研究了,这部分仅仅是梳理一下一些关于https最基本的原理,为后面分解https的连接建立以及https优化等内容打下理论基础。 3.1 对称加密算法 对称加密是指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信至关重要。 对称加密又分为两种模式:流加密和分组加密。 流加密是将消息作为位流对待,并且使用数学函数分别作用在每一个位上,使用流加密时,每加密一次,相同的明文位会转换成不同的密文位。流加密使用了密钥流生成器,它生成的位流与明文位进行异或,从而生成密文。现在常用的就是RC4,不过RC4已经不再安全,微软也建议网络尽量不要使用RC4流加密。 分组加密是将消息划分为若干位分组,这些分组随后会通过数学函数进行处理,每次一个分组。假设需要加密发生给对端的消息,并且使用的是64位的分组密码,此时如果消息长度为640位,就会被划分成10个64位的分组,每个分组都用一系列数学公式公式进行处理,最后得到10个加密文本分组。然后,将这条密文消息发送给对端。对端必须拥有相同的分组密码,以相反的顺序对10个密文分组使用前面的算法解密,最终得到明文的消息。比较常用的分组加密算法有DES、3DES、AES。其中DES是比较老的加密算法,现在已经被证明不安全。而3DES是一个过渡的加密算法,相当于在DES基础上进行三重运算来提高安全性,但其本质上还是和DES算法一致。而AES是DES算法的替代算法,是现在最安全的对称加密算法之一。分组加密算法除了算法本身外还存在很多种不同的运算方式,比如ECB、CBC、CFB、OFB、CTR等,这些不同的模式可能只针对特定功能的环境中有效,所以要了解各种不同的模式以及每种模式的用途。这个部分后面的文章中会详细讲。 对称加密算法的优、缺点: 优点:算法公开、计算量小、加密速度快、加密效率高。 缺点:(1)交易双方都使用同样钥匙,安全性得不到保证; (2)每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。 (3)能提供机密性,但是不能提供验证和不可否认性。 3.2 非对称加密算法 在非对称密钥交换算法出现以前,对称加密一个很大的问题就是不知道如何安全生成和保管密钥。非对称密钥交换过程主要就是为了解决这个问题,使得对称密钥的生成和使用更加安全。 密钥交换算法本身非常复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等操作。 常见的密钥交换算法有RSA,ECDHE,DH,DHE等算法。涉及到比较复杂的数学问题,下面就简单介绍下最经典的RSA算法。RSA:算法实现简单,诞生于1977年,历史悠久,经过了长时间的破解测试,安全性高。缺点就是需要比较大的素数也就是质数(目前常用的是2048位)来保证安全强度,很消耗CPU运算资源。RSA是目前唯一一个既能用于密钥交换又能用于证书签名的算法。我觉得RSA可以算是最经典的非对称加密算法了,虽然算法本身都是数学的东西,但是作为最经典的算法,我自己也花了点时间对算法进行了研究,后面会详细介绍。 非对称加密相比对称加密更加安全,但也存在两个明显缺点: 1,CPU计算资源消耗非常大。一次完全TLS握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上。而对称加密的计算量只相当于非对称加密的0.1%,如果应用层数据也使用非对称加解密,性能开销太大,无法承受。 2,非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是2048位,意味着待加密内容不能超过256个字节。 所以公钥加密(极端消耗CPU资源)目前只能用来作密钥交换或者内容签名,不适合用来做应用层传输内容的加解密。 3.3 身份认证 https协议中身份认证的部分是由数字证书来完成的,证书由公钥、证书主体、数字签名等内容组成,在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证(验证查看这张证书是否是伪造的。也就是公钥是否是伪造的),并获取用于秘钥交换的非对称密钥(获取公钥)。 数字证书有两个作用: 1,身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。 2,分发公钥。每个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥)。在SSL握手时会通过certificate消息传输给客户端。 申请一个受信任的数字证书通常有如下流程: 1,终端实体(可以是一个终端硬件或者网站)生成公私钥和证书请求。 2,RA(证书注册及审核机构)检查实体的合法性。如果个人或者小网站,这一步不是必须的。 3,CA(证书签发机构)签发证书,发送给申请者。 4,证书更新到repository(负责数字证书及CRL内容存储和分发),终端后续从repository更新证书,查询证书状态等。 数字证书验证: 申请者拿到CA的证书并部署在网站服务器端,那浏览器发起握手接收到证书后,如何确认这个证书就是CA签发的呢。怎样避免第三方伪造这个证书。答案就是数字签名(digital signature)。数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)数字签名的制作和验证过程如下: 1,数字签名的签发。首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。 2,数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对待签名证书内容进行签名并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。 需要注意的是: 1)数字签名签发和校验使用的密钥对是CA自己的公私密钥,跟证书申请者提交的公钥没有关系。 2)数字签名的签发过程跟公钥加密的过程刚好相反,即是用私钥加密,公钥解密。 3)现在大的CA都会有证书链,证书链的好处一是安全,保持根CA的私钥离线使用。第二个好处是方便部署和撤销,即如果证书出现问题,只需要撤销相应级别的证书,根证书依然安全。 4)根CA证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的密钥对完成签名和验证的。 5)怎样获取根CA和多级CA的密钥对。它们是否可信。当然可信,因为这些厂商跟浏览器和操作系统都有合作,它们的公钥都默认装到了浏览器或者操作系统环境里。 3.4 数据完整性验证 数据传输过程中的完整性使用MAC算法来保证。为了避免网络中传输的数据被非法篡改,SSL利用基于MD5或SHA的MAC算法来保证消息的完整性。 MAC算法是在密钥参与下的数据摘要算法,能将密钥和任意长度的数据转换为固定长度的数据。发送者在密钥的参与下,利用MAC算法计算出消息的MAC值,并将其加在消息之后发送给接收者。接收者利用同样的密钥和MAC算法计算出消息的MAC值,并与接收到的MAC值比较。如果二者相同,则报文没有改变;否则,报文在传输过程中被修改,接收者将丢弃该报文。 由于MD5在实际应用中存在冲突的可能性比较大,所以尽量别采用MD5来验证内容一致性。SHA也不能使用SHA0和SHA1,中国山东大学的王小云教授在2005年就宣布破解了 SHA-1完整版算法。微软和google都已经宣布16年及17年之后不再支持sha1签名证书。MAC算法涉及到很多复杂的数学问题,这里就不多讲细节了。 专题二--【实际抓包分析】 抓包结果: fiddler: wireshark: 可以看到,百度和我们公司一样,也采用以下策略: (1)对于高版本浏览器,如果支持 https,且加解密算法在TLS1.0 以上的,都将所有 http请求重定向到 https请求 (2)对于https请求,则不变。 【以下只解读https请求】 1、TCP三次握手 可以看到,我们访问的是 http://www.baidu.com/ , 在初次建立 三次握手的时候, 用户是去 连接 8080端口的(因为公司办公网做了代理,因此,我们实际和代理机做的三次握手,公司代理机再帮我们去连接百度服务器的80端口) 2、CONNECT 建立 由于公司办公网访问非腾讯域名,会做代理,因此,在进行https访问的时候,我们的电脑需要和公司代理机做 " CONNECT " 连接(关于 " CONNECT " 连接, 可以理解为虽然后续的https请求都是公司代理机和百度服务器进行公私钥连接和对称秘钥通信,但是,有了 " CONNECT " 连接之后,可以认为我们也在直接和百度服务器进行公私钥连接和对称秘钥通信。 ) fiddler抓包结果: CONNECT之后, 后面所有的通信过程,可以看做是我们的机器和百度服务器在直接通信 3、 client hello 整个 Secure Socket Layer只包含了: TLS1.2 Record Layer内容 (1)随机数 在客户端问候中,有四个字节以Unix时间格式记录了客户端的协调世界时间(UTC)。协调世界时间是从1970年1月1日开始到当前时刻所经历的秒数。在这个例子中,0x2516b84b就是协调世界时间。在他后面有28字节的随机数( random_C ),在后面的过程中我们会用到这个随机数。 (2)SID(Session ID) 如果出于某种原因,对话中断,就需要重新握手。为了避免重新握手而造成的访问效率低下,这时候引入了session ID的概念, session ID的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的"对话密钥",而不必重新生成一把。 因为我们抓包的时候,是几个小时内第一次访问 https://www.baodu.com 首页,因此,这里并没有 Session ID. (稍会儿我们会看到隔了半分钟,第二次抓包就有这个Session ID) session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。session ticket就是为了解决这个问题而诞生的,目前只有Firefox和Chrome浏览器支持。 (3) 密文族(Cipher Suites): RFC2246中建议了很多中组合,一般写法是"密钥交换算法-对称加密算法-哈希算法,以“TLS_RSA_WITH_AES_256_CBC_SHA”为例: (a) TLS为协议,RSA为密钥交换的算法; (b) AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式); (c) SHA是哈希的算法。 浏览器支持的加密算法一般会比较多,而服务端会根据自身的业务情况选择比较适合的加密组合发给客户端。(比如综合安全性以及速度、性能等因素) (4) Server_name扩展:( 一般浏览器也支持 SNI(Server Name Indication)) 当我们去访问一个站点时,一定是先通过DNS解析出站点对应的ip地址,通过ip地址来访问站点,由于很多时候一个ip地址是给很多的站点公用,因此如果没有server_name这个字段,server是无法给与客户端相应的数字证书的,Server_name扩展则允许服务器对浏览器的请求授予相对应的证书。 还有一个很好的功能: SNI(Server Name Indication)。这个的功能比较好,为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。一句话简述它的工作原理就是,在连接到服务器建立SSL连接之前先发送要访问站点的域名(Hostname),这样服务器根据这个域名返回一个合适的CA证书。目前,大多数操作系统和浏览器都已经很好地支持SNI扩展,OpenSSL 0.9.8已经内置这一功能,据说新版的nginx也支持SNI。) 4、 服务器回复(包括 Server Hello, Certificate, Certificate Status) 服务器在收到client hello后,会回复三个数据包,下面分别看一下: 1)Server Hello 1、我们得到了服务器的以Unix时间格式记录的UTC和28字节的随机数 (random_S)。 2、Seesion ID,服务端对于session ID一般会有三种选择 (稍会儿我们会看到隔了半分钟,第二次抓包就有这个Session ID) : 1)恢复的session ID:我们之前在client hello里面已经提到,如果client hello里面的session ID在服务端有缓存,服务端会尝试恢复这个session; 2)新的session ID:这里又分两种情况,第一种是client hello里面的session ID是空值,此时服务端会给客户端一个新的session ID,第二种是client hello里面的session ID此服务器并没有找到对应的缓存,此时也会回一个新的session ID给客户端; 3)NULL:服务端不希望此session被恢复,因此session ID为空。 3、我们记得在client hello里面,客户端给出了21种加密族,而在我们所提供的21个加密族中,服务端挑选了“TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”。 (a) TLS为协议,RSA为密钥交换的算法; (b) AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式); (c) SHA是哈希的算法。 这就意味着服务端会使用ECDHE-RSA算法进行密钥交换,通过AES_128_GCM对称加密算法来加密数据,利用SHA256哈希算法来确保数据完整性。这是百度综合了安全、性能、访问速度等多方面后选取的加密组合。 2)Certificate 在前面的https原理研究中,我们知道为了安全的将公钥发给客户端,服务端会把公钥放入数字证书中并发给客户端(数字证书可以自签发,但是一般为了保证安全会有一个专门的CA机构签发),所以这个报文就是数字证书,4097 bytes就是证书的长度。 我们打开这个证书,可以看到证书的具体信息,这个具体信息通过抓包报文的方式不是太直观,可以在浏览器上直接看。 (点击 chrome 浏览器 左上方的 绿色 锁型按钮) 3)Server Hello Done 我们抓的包是将 Server Hello Done 和 server key exchage 合并的包: 4)客户端验证证书真伪性 客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作,合法性验证包括如下: 证书链的可信性trusted certificate path,方法如前文所述; 证书是否吊销revocation,有两类方式离线CRL与在线OCSP,不同的客户端行为会不同; 有效期expiry date,证书是否在有效时间范围; 域名domain,核查证书域名是否与当前的访问域名匹配,匹配规则后续分析; 5)秘钥交换 这个过程非常复杂,大概总结一下: (1)首先,其利用非对称加密实现身份认证和密钥协商,利用非对称加密,协商好加解密数据的 对称秘钥(外加CA认证,防止中间人窃取 对称秘钥) (2)然后,对称加密算法采用协商的密钥对数据加密,客户端和服务器利用 对称秘钥 进行通信; (3)最后,基于散列函数验证信息的完整性,确保通信数据不会被中间人恶意篡改。 此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数random_C和random_S与自己计算产生的Pre-master(由客户端和服务器的 pubkey生成的一串随机数),计算得到协商对称密钥; enc_key=Fuc(random_C, random_S, Pre-Master) 6)生成 session ticket 如果出于某种原因,对话中断,就需要重新握手。为了避免重新握手而造成的访问效率低下,这时候引入了session ID的概念, session ID的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的"对话密钥",而不必重新生成一把。 因为我们抓包的时候,是几个小时内第一次访问 https://www.baodu.com 首页,因此,这里并没有 Session ID. (稍会儿我们会看到隔了半分钟,第二次抓包就有这个Session ID) session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。session ticket就是为了解决这个问题而诞生的,目前只有Firefox和Chrome浏览器支持。 后续建立新的https会话,就可以利用 session ID 或者 session Tickets , 对称秘钥可以再次使用,从而免去了 https 公私钥交换、CA认证等等过程,极大地缩短 https 会话连接时间。 7) 利用对称秘钥传输数据 【半分钟后,再次访问百度】: 有这些大的不同: 由于服务器和浏览器缓存了 Session ID 和 Session Tickets,不需要再进行 公钥证书传递,CA认证,生成 对称秘钥等过程,直接利用半分钟前的 对称秘钥 加解密数据进行会话。 1)Client Hello 2)Server Hello
玄学酱 2019-12-02 01:27:08 0 浏览量 回答数 0

回答

引用来自“冷血”的答案 在用户登陆成功后,将密码明文用sha-1加密存储。 这方法可取,这样需要加一个字段来表示是用什么加密方式加密的密码。 $sql = "SELECT username, password, encry_type from user where username = '".$_POST["username"]."'"; $r = $db->findOne($sql); if($r){ if($r["encry_type"] == "md5"){ if($r["password"] == md5($_POST["password")){ // 登录成功 $sql = "UPDATE user SET password = '".sha1($_POST["password")."', encry_type = 'sha1' WHERE username = '"..$_POST["username"]."'"; $db->query($sql); }else{ // 登录失败 } }else if($r["encry_type"] == "sha1"){ if($r["password"] == sha1($_POST["password")){ // 登录成功 }else{ // 登录失败 } } } ######+1######同问。我能想到的就是两次加密######不成######在用户登陆成功后,将密码明文用sha-1加密存储。###### 两次加密吧,更安全。 md5是不可逆加密,只有获得原始密码,才能改为sha1 ######md5是单向hash,sha1是更强的单向hash,当然可以。本来认证用户的秘密就和明文无关的。######md5和sha-1不是加密算法,他们是信息摘要,单向的生成一段摘要码,只能通过碰撞算法之类的去猜,无法解密。
kun坤 2020-06-06 14:26:50 0 浏览量 回答数 0

问题

C# 如何 和php 的des 加密解密 保持一致 加密报错 

各自独立:php,。net自己加密解密是没问题的 首先测试过 MD5是一样的。 但是用php和。net加密的结果不一样 用php加密的数据用。net解密就报错 请问为什么??&#x...
kun坤 2020-06-03 10:32:47 2 浏览量 回答数 1

回答

什么是MD5???---MD5的全称是Message-Digest Algorithm 5 MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如: MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461 这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的 "抵赖",这就是所谓的数字签名应用。 MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用e799bee5baa6e997aee7ad94e58685e5aeb931333332643862户知道,而且还在一定程度上增加了密码被破解的难度。 正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5 值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P (62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。
剑曼红尘 2020-05-03 16:00:27 0 浏览量 回答数 0

回答

注意:本文相关配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试。其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档。 SSH 服务在进行数据传输前,会先进行密钥交换和协商确认。完成后再对后续数据进行加密传输,以提高安全性。本文先对 SSH 服务所采用的非对称加密技术进行简要介绍,然后对 SSH 连接过程中的相关交互,及关联文件进行说明。 非对称加密技术 SSH 服务基于非对称加密(public-key cryptography,也称公开密钥加密)技术实现数据加密传输。该技术会生成一对数学相关的密钥,其中一个用于对数据进行加密,而且只能用于加密,而另一个只能用于解密。使用加密密钥加密后的数据,只能用对应的解密密钥才能解密。而且,只知道其中一个密钥,无法计算出另一个。因此,如果公开了一对密钥中的一个,并不会危害到另一个的秘密性质。通常把公开的密钥称为公钥(public key),而不公开的密钥称为私钥(private key)。 如果公开的是解密密钥,该场景用于客户端验证持有私钥一方发布的数据或文件的完整性、准确性,以防止数据篡改。相应的密钥称为数字签名(数字证书)。如果公开的是加密密钥,该场景用于客户给私钥所有者上传数据,称为公开密钥加密。 SSH 服务基于该场景实现。 与对称密钥加密相比,非对称加密的优点在于不存在共享的通用密钥。由于解密用的私钥无需发送给任何用户,所以可以避免密钥被劫持或篡改。而加密用的公钥即便被劫持或篡改,如果没有与其匹配的私钥,也无法解密数据。所以,截获的公钥是没有任何用处的。 当前,SSH主要采用 RSA 算法(协议 V2 默认算法)和 DSA 算法(协议 V1 仅支持该算法)来实现非对称加密技术。 连接交互过程 SSH 服务建立连接时的相关交互过程,如下SSH 服务连接交互示意图 所示: 连接过程中的相关交互步骤,详细说明如下。 服务端准备阶段 非对称加密协商 后续数据交互过程 服务端准备阶段 服务端在每次启动 SSH 服务时,都会自动检查 /etc/ssh/ 目录下相关密钥文件的有效性。如果相关文件检查发现异常,则会导致服务启动失败,并抛出相应错误信息。 如果文件相关不存在,则会自动重新创建。 默认创建的相关文件及用途说明如下: ll /etc/ssh/ -rw-------. 1 root root 125811 Aug 13 2015 moduli → 用于 DH-GEX 算法 -rw-r--r--. 1 root root 2047 Aug 13 2015 ssh_config → SSH 客户端配置文件 -rw-------. 1 root root 3879 Aug 13 2015 sshd_config → SSH 服务配置文件 -rw-------. 1 root root 672 May 20 14:22 ssh_host_dsa_key → DSA 算法私钥 -rw-r--r--. 1 root root 590 May 20 14:22 ssh_host_dsa_key.pub → DSA 算法公钥 -rw-------. 1 root root 963 May 20 14:22 ssh_host_key → SSH V1 版RSA 算法私钥 -rw-r--r--. 1 root root 627 May 20 14:22 ssh_host_key.pub → SSH V1 版 RSA 算法公钥 -rw-------. 1 root root 1675 May 20 14:22 ssh_host_rsa_key → SSH V2 版 RSA 算法私钥 -rw-r--r--. 1 root root 382 May 20 14:22 ssh_host_rsa_key.pub → SSH V2 版 RSA 算法公钥 非对称加密协商 服务端 SSH 服务正常运行后,客户端连接时,进行如下交互: 客户端向服务端发送连接请求。 客户端通过 SSH 工具连接服务端。相关信息通过明文发送。 服务端返回公钥信息: 根据客户端所使用的服务协议版本及算法设置,返回相应公钥信息。比如,默认情况下,客户端通过 SSH V2 版协议,基于 RSA 算法建立连接,则服务端将 ssh_host_rsa_key.pub 文件中的内容返回客户端。相关信息通过明文发送。 客户端对服务端公钥信息进行比对和确认: 客户端接收到服务端公钥信息后,会进行如下比对,并让用户对相关信息进行确认。 如果是首次连接服务端,客户端会收到类似如下信息,让用户确认公钥指纹的有效性: The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established. RSA key fingerprint is c2:49:d9:43:74:d5:ed:bc:28:9b:d2:7b:63:94:cf:bc. Are you sure you want to continue connecting (yes/no)? <ol> <li class="MsoListParagraph"><span>如果用户输入</span><span> <span>no </span></span><span>,则连接中断并报错(</span><span>Host key verification failed</span><span>)。</span></li> </ol> <ul> <li class="MsoListParagraph"><span>如果用户输入</span><span> <span>yes</span></span><span>,则会将相应的公钥信息,保存到当前用户家目录下</span><span> .ssh </span><span>目录内的</span><span> <span>known_hosts </span></span><span>文件中。</span><span> </span><span>比如:</span> cat ~/.ssh/known_hosts IP 明文显示: 192.168.0.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3sdlboGEgY9buZpkPuygPw0NxAvmxYd0mc3fo2MgP+JqgFC9/9ZXOgDXKJrjE2HKBieJZSPKGncIh+zLxTvmykeJQBXv7i1GiUjW+H3VY69Ge3AdGfCd+XF+Cvi1e+j18zhHnjSzvIBoNpT5cBWWNbw7mNHCwTb0sHAVUkWR4Ck/LM5/rQ09A+m6BLfZJL8CRNGxKTbyINi6o812S+Cy64WqDs1nTpIXp2Bkcpjclb36bFSs9Z/tWNuJl7A//7HNtxMgFGBnE07Ykvvy8s06DUmkyFy8GcXGBpnfdg9utLodfQLFQnKflCQZ110BpQaCWlWPjU9dc4w3XLJ/XQOP4w== IP 做了加密处理: |1|3efXAZ4sNHcUcHamBy4gDriblc8=|8idBhLq9aLl2sfh4KswMsk4sPFI= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwS4DE3hok8RCkxYlTxsexNrNa62e05UGSkoP7ie26DDWjG1Aoc74cCsE4is9p7lEfFUYYlAzeYhPqE/yGf5YxRZUOU2IeFI4cEqo8YZr7edVYpgAq2f2J0zMwk1syenD12lmUPkYA4mMB6it3jxXR5k+H0HZh9YA7mRXkiTjlkAMWirBcnUvtKYRv9LRIr3ikUiPy2gfZO291Ae9zuTsWwEtHQxIpiBgk3vwF2gCUFlX9y//IsMjdQq5prk7x3BjXhUorqgJO1gt1VHW8Xxx9Oe50YF1hi9DuE6VXwyh4xfHTmauRQybwsYafdA3HxrA2od6x9l19D9EH7xHAjDa5w== 如果服务端因重装系统等因素导致公钥指纹出现变化,则会直接导致连接失败(报错Host key verification failed),则需要删除已保存的条目后再重新连接。 相关操作可以参阅 云服务器 ECS Linux 客户端 SSH 公钥指纹不匹配导致 SSH 登录失败。 如果之前已经成功连接,而且公钥指纹对比一致,则会继续下一步操作。 客户端生成临时密钥对: 服务端公钥校验及确认后,客户端会生成一对临时密钥用于客户端加密。该密钥对不会存储到文件,而是记录在内存中。每次连接都会重新生成临时密钥对。 客户端发送公钥信息: 客户端向服务端,发送前述生成的临时密钥对中的公钥信息。相关信息通过明文发送。 至此,服务端及客户端都拥有对方的公钥和自身的私钥,所以称为非对称加密。 后续数据交互过程 后续登录校验及正常的数据传输,都会通过双向加密方式进行。相关交互说明如下: 如果服务端需要发送数据给客户端: 服务端使用所持有的客户端公钥,对需要传输的数据进行加密,再发送给客户端。客户端收到信息后,使用所持有的自身私钥解密后获取数据。 反之,如果客户端需要发送数据给服务端,也是类似的流程: 客户端使用所持有的服务端公钥,对需要传输的数据进行加密,再发送给服务端。服务端收到信息后,使用所持有的自身私钥解密后获取数据。 更多信息 公钥指纹 由于公钥一般较长(采用RSA算法时长达 1024 位)。所以,为了简便起见,通过对其MD5计算,生成一个128位的字符串用于信息对比。此称为公钥指纹。 Secure Shell:Wikipedia 上关于 SSH 的介绍和讨论。 OpenSSH Manual Pages:OpenSSH 官方使用手册。 RSA:Wikipedia 上关于 RSA 算法的介绍。 DSA:Wikipedia 上关于 DSA 算法的介绍。
KB小秘书 2019-12-02 02:07:15 0 浏览量 回答数 0

回答

传输安全只有https 客户端hash密码只是表明作为网站拥有者不想也不会记录原始密码是什么 上面那个链接我回复过, 不用ssl就算加密也没用, 任意节点伪造response,加上一段js就可以实现form submit的全局委托, 直接把你表单的明文数据转发到第三方上, 再加密提交也没用 ######服务端添加一个文件MD5验证过程,客户端用AJAX配合验证本页面是否在传输过程中有被改动的痕迹~!######回复 @somecold : 第一个问题我觉得花大力气还堵不死没什么必要, 普通geotrust, comodo的256bit加密的收费ssl也就单域几十块一年, 相对来说彻底多了; 第二个问题, 没有任何办法能防止非正常的web方式构造http请求。######这么说确实没法在传输层保证,不过用这种方式应该可以杜绝大部分小黑客吧? 另外请教下有办法防止重构http请求吗?就是限定只能通过网页进行登录###### 之前我发帖讨论过,可以参考一下 http://www.oschina.net/question/42741_51307 ###### 恩我看完了,leo108 你的想法就是说在登录的时候先去服务器获取一个token(token只能用一次)。 然后拿 token 和 MD5(明文密码) 进行MD5加密后传输(数据库存 MD5(明文密码)。 这样看来针对登录这部分应该能有效防止我说的情况。 但是我现在有另外一个想法 是不是可以有办法防止 即使得到密串,也没法重构HTTP请求,就是只能通过打开网页输入用户名和密码来登录,没办法通过组装一个url或者编程实现登录? ######回复 @七液 : 不是很明白,什么也可以clone?网上没搜到http clone嗅探相关资料,麻烦说详细点。######这个也可以clone,看一下http clone嗅探的相关资料就知道了######sha1解开的成本太高 ######解开的成本高######随机验证码+hash目前最合适的方法用完后一次性抛弃即可。rsa还需要和服务器通讯这就和https一样了######明白了,你说的是加sha的方式成本太高吧,那有什么好办法没呢######蟋蟀哥哥是说oschina采用的sha1成本太高,还是说我说的问题可以采用sha1但是成本太高?###### https://mail.qq.com/  (本人亲测) 在IE登录QQ邮箱,Wireshark抓取Cookie,停止Wireshark,断网重拨获取新的IP,在Firefox注入Cookie,成功登录QQ邮箱. QQ邮箱难道连IP都不认证? 能控制网关第一手就能拿到Cookie,先不说破解用户密码. 不过普通人怎么可能控制公网上的网关? 路由局域网内用arpspoof欺骗,开IP路由转发还有可能办成网关过滤用户信息. 除非能入侵公网上的网关,否则都不太现实. ######一直觉得腾讯强在用户体验,技术在它们的价值观应该不是第一位的。出现这种情况也正常吧###### 我在想用java/flash做成控件配合des之类的加密的方法在http上传输安全不? ###### 引用来自“熊猫与猫无关”的答案 我在想用java/flash做成控件配合des之类的加密的方法在http上传输安全不? 安全应能达到,但是这样与ssl相比,有优势吗 ###### 引用来自“somecold”的答案 引用来自“熊猫与猫无关”的答案 我在想用java/flash做成控件配合des之类的加密的方法在http上传输安全不? 安全应能达到,但是这样与ssl相比,有优势吗 证书年年需要续费这个算不算SSL的劣势 (我是纯属来捣乱的.....) ###### 我想可以这么做: 1. md5(pwd)做为key去加密(用户的信息+ip+有效时间范围),加密算法,可以是tea 2.服务器用md5(pwd)做为key去解密,之后校验用户的信息,ip和有效时间范围。 3.服务器存储的就是md5(pwd)
kun坤 2020-06-08 11:22:51 0 浏览量 回答数 0

回答

###l 用C语言实现了很多种常见的加密算法: 三个组件: 1、libcrypto 库文件 专门实现加密解密的库文件, 2、libssl 库文件,主要是实现https这样协议 3、openssl 多用途加密工具,还可以制作一个CA出来 一般来讲openssl都会装上,使用一个openssl加一个错误的选项就能看见它的使用 选项 单项加密时的用法: openssl enc -des3 -salt -a -in inittab -out inittab.des3 实现对于一个文件加密 enc是加密 -des3是加密算法 -salt 加入杂质 -in后面跟文件名 -out加密后放在哪个文件里 openssl enc -d -des3 -salt -a -in inittab.des3 -out inittab -d表示解密 openssl dgst -sha inittab 表示计算inittab文件的特征值 用户认证时passwd的用法,怎么去帮你生成一个类似于保存在/etc/shadow文件里的密码一样 openssl passwd -1 -1表示使用MD5算法 [root@server46 ~]# openssl passwd -1 Password: Verifying - Password: $1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 openssl passwd -1 -salt 杂质 这样计算结果就一样了 [root@server46 ~]# openssl passwd -1 Password: Verifying - Password: $1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 [root@server46 ~]# openssl passwd -1 -salt 7HW0kv8y Password: $1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 man sslpasswd可以查看用法 非对称加密: openssl怎样发证: 切换目录到/etc/pki/tls/certs make *.key就可以产生一个密钥 make *.cert可以生成一个证书,主要是看文件后缀生成文件,是redhat提供的便捷方式 make my.key就可以生成一个密钥 (umask 66;openssl genrsa 1024 > my.key) 生成私钥文件 这是在一个子shell里进行,umask只对后面的这一个命令有效,umask执行完以后就恢复到原来 提取公钥: openssl rsa -in my.key -pubout -out myr.pubkey [root@server46 certs]# (umask 66; openssl genrsa 1024 > my.key) Generating RSA private key, 1024 bit long modulus ...++++++ ........++++++ e is 65537 (0x10001) [root@server46 certs]# cat my.key -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDRSlvZZ7p7sRbczdGhcw/8z5mzEKIjDZw63ffsxCDC9XWKO0vE FaxbPrgwZYF+iu8QHUKVzuJoqO8MmfY7p9aGz2WT2GQ/wUTnjsbL8mNbSclV/2m8 K0XZqSLsKzuhaBOFC+sylQvnZiXP23slNWZIuV0EVh9k2ULSV4f8B5QtywIDAQAB AoGATNkA4NM1pjVgL7NjReT5+dpAlX+GCVj2BKd8YXOik/ONNTSQnW9X2ikteJfM 9KoPHdugl2FfwQ5GuFnQEBeQrUV5SnR09k2OZTsdOMVNXqamf4V/rXidOs+L3RVK Q4X6vpasS1CJ1/q/fCcsi1Nl0nLcV9stLXbmEzYqE6+hwAECQQDqxrbF5W9j5vVM ZkKmvx1ViojwTJovlkOtl6RSkqHMR3msnHhizbc+iGrGiP/vH9H+AvDK7AJPNVng kHAa5YGbAkEA5DXX0dIajPoAdLvmNG1kNY1fp6IJjfR8UJRWeOwjhVjul1yp47hP bM/f55OmowdsQamfNVwk4P5iYIcZ8uwfkQJBAJoXToLYsaF6Rumb/IcAzLoGMRa2 0EQHdegLrVhc0UEIcH2wPPtsVab/VkV0SbaixerX9z7YZDOkqpbPdiTRGZ0CQBWv 2DakVMmY6HovcQ0CaEd+i9yOVYIb/cRalG0hY67EaMgRkkOFvGaGyqxjJ67Ogccr q2mSvB51jjvGGv0u20ECQQCHvgJkF3xHkQnahqCTTgym0CNocHhVfyo6KveIfBAk Vz69+zsGK2kKBOseSbgRKqVmM21Iqu0aZatjEevHwZIo -----END RSA PRIVATE KEY----- [root@server46 certs]# openssl rsa -in my.key -pubout -out my.pubkey writing RSA key [root@server46 certs]# cat my.pubkey -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRSlvZZ7p7sRbczdGhcw/8z5mz EKIjDZw63ffsxCDC9XWKO0vEFaxbPrgwZYF+iu8QHUKVzuJoqO8MmfY7p9aGz2WT 2GQ/wUTnjsbL8mNbSclV/2m8K0XZqSLsKzuhaBOFC+sylQvnZiXP23slNWZIuV0E Vh9k2ULSV4f8B5QtywIDAQAB -----END PUBLIC KEY----- 发证步骤: 1、首先生成一对密钥(S/P密钥) 2、然后把公钥放在一个叫证书颁发请求里(里面包括你的公钥,姓名,地址,等一些列描述信息) 发送到证书颁发机构 3、CRT证书就生成了 自己成为CA: 1、cd /etc/pki/CA 有一个 private 文件,里面专门放CA的私钥文件 2、给自己生成一个密钥 (umask 66; openssl genrsa 2048 > private/cakey.pem[这里只能叫cakey.pem]) ll private 给自己发证书: openssl req -new -x509 -key private/cake.pem -out cacert.pem openssl req -new -x509 -key private/cake.pem -out cacert.pem 接下来会提示你输入一些信息 写完之后就是一个自签的证书 接下来就可以给别人发证了 view plaincopy to clipboardprint? openssl req -new -x509 -key private/cake.pem -out cacert.pem -days3655 openssl req -new -x509 -key private/cake.pem -out cacert.pem -days3655 3、编辑cA的配置文件 view plaincopy to clipboardprint? vim /etc/pki/tls/openssl.cnf这里定义了 vim /etc/pki/tls/openssl.cnf这里定义了 找到【 CA_default 】字段 修改 dir 改为绝对路径 这里有些目录没有需要我们手动建立,在这个配置文件内我们都能找到 然后还可以修改默认信息 到这里才 算是一个完整的CA 4、接下来给web服务器做一个证书: view plaincopy to clipboardprint? cd /etc/httpd mkdir ssl cd ssl (umask 66;openssl genrsa 2048 > web.key) cd /etc/pki/CA mkdir certs crl newcerts touch index.txt serial echo 01 > serial openssl req -new -key wed.key -out wed.csr 这是一个证书颁发请求 opssl ca -in wed.csr -out web.crt 颁发证书 cd /etc/httpd mkdir ssl cd ssl (umask 66;openssl genrsa 2048 > web.key) cd /etc/pki/CA mkdir certs crl newcerts touch index.txt serial echo 01 > serial openssl req -new -key wed.key -out wed.csr 这是一个证书颁发请求 opssl ca -in wed.csr -out web.crt 颁发证书 然后敲两次回车 就ok了
小哇 2019-12-02 01:26:47 0 浏览量 回答数 0

问题

生成、签署 ECC 证书,Apache Httpd 部署双证书教程

前言 2017年绝对是移动互联网的加密元年,越来越多的移动互联网网站、应用会部署 HTTPS 加密,不过移动平台因为普遍基于 ARM 架构所以对处理 HTTPS 的性能和速度都不如电脑平台。 因此我们就需...
妙正灰 2019-12-01 21:40:04 5348 浏览量 回答数 1

问题

2018python技术问答集锦,希望能给喜欢python的同学一些帮助

小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本帖不定期更新,喜欢的可以收藏哦 python可能替代Java吗?感觉现在很多Java程序员都跑去学python。h...
技术小能手 2019-12-01 19:31:10 2040 浏览量 回答数 2

问题

关于Object操作之如何实现GetObject?

Get Object 用于获取某个Object,此操作要求用户对该Object有读权限。 请求语法GET /ObjectName HTTP/1.1Host: BucketName.oss-cn-hangzhou.ali...
青衫无名 2019-12-01 21:50:04 2573 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT