【韦德国际1946国际网址】SSL能还是不能够成功,

作者: 韦德国际1946国际网址  发布:2019-05-28

  赛门铁克公司(Symantec)已经济切磋发了一种新的开辟性的能力进级升高SSL证书的克拉玛依水平。能为客户提供SSL证书是由三种算法,蕴含椭圆曲线加密(ECC)和数字具名算法(DCA),不止超过古板的神秘算法,而且速度也做实10000倍。对于其余类型的网址,无论是大或小,其客户的多少安全,尊崇其人气和贸易是最珍视和最灵敏的难点。 SSL证书确认保证网址的安全性。

个人原创,如有转发,请注明出处。

在地点对AES加密的始发认识中,大家知道AES加密需求一个key,加减密双方都亟待理解,那这么些key怎么设定好?看一下上面包车型大巴壹种情景:
在应酬的应用程式中,一般对聊天内容都会是加密的,A和B聊天,A和C聊天。如果这几个Key都以定位的,那么是还是不是意味:假诺B通过蛮力等方法破解某段聊天音信,获得了和A之间的AES_Key,再抓包威胁了A和C的传导内容,就能够肆意的破解A和C之间的源委,显著这种做法是不安全的。
为此安全的情势是A和B,A和C,B和C, 他们聊聊内容加密的key都以不一致的(再安全点加密方法也得以有分别)。那样固然A和B的加密被破解了,A和C,B和C等别的的聊天记录都不会被大4破解。

正文首借使前方《java完成双向帕杰罗SA AES加密》的补充,只补充新扩大的代码,

  赛门铁克的SSL证书巅峰事件是20拾年收购了VeriSign认证职业,VeriSign本来就是SSL加密行内老大,赛门铁克收购后越发实力大增。早在1985年,ECC就曾经问世,那是依靠数学算法,以非常低的比特长度固定的管理速度。据赛门铁克称,未来运算速度已改成第一的因素,因为美利坚合众国国营标准和美利哥技能研讨院(NIST),须求网站加密技能从RAV4SA十2多少人到20四十八位展开进级换代,依据联邦法律,直到2014年一月1完结以上专业。别的,那应当是强制性的,从预先警戒的角度来看,大尺寸加密是难以突破。

近些日子做事有个类别必要用到加密算法,在英特网检索,Crypto 库是二个毋庸置疑的加密算法库,不过在网络,用Crypto 库来做ECC加密算法的例子没有多少。而且互连网的例证也大都以把公钥和私钥生成到文件中,而小编须求的是把公钥和私钥直接放到字符串中。

那怎么传送那几个key,断定不是堂而皇之传送,那用哪1种加密方法更加好点,一般都以非对称加密,如RAV四SA、ECC等。
非对称加密:加减密的密钥分化,分私钥和公钥。
主流的非对称加密方法如:RubiconSA和ECC
此间为何选拔ECC,客观因素有数不尽:
安全性高
有色金属切磋所究代表1陆九位的扁圆形密钥与10二二个人的HummerH二SA密钥安全性一样,257个人也正是30柒拾伍位。

JDK中自带了椭圆曲线的具名,可是没有达成椭圆曲线的加密解密。但是bouncycastle库完结了,上面包车型大巴代码需求bouncycastle库。

  据赛门铁克的网址安全化解方案部门产品管理高等经理Bob·伯利特介绍,蛮力攻击的格局能够破解加密算法的。不过加密位假使更加长在运用时进程又太慢。赛门铁克称可提供3个二伍20人加密算法的ECC SSL证书,差非常少千篇1律307一人的翼虎SA SSL证书的安全度。赛门铁克已经测试并开采,ECC的质量和响应时间要比君越SA好过多,OdysseySA证书每秒管理四四二十个请求,从服务器到客户浏览器端平均响应时间为150飞秒,而ECC SSL证书只要求7伍阿秒。

透过和睦的检索和调查,终于找到了落实的办法,恐怕不是最佳的,但也算1种
化解方案。

加密功效相比较
壹)总计负荷:在私钥的加密解密速度上,速度越来越快。
二)密钥大小:存款和储蓄空间攻克小。
叁)带宽:带宽供给低.

亟待做的备选职业:

  对于Web服务器必须经过1种技能支持ECC加密,像Apache早已席卷“ECC优化版”。赛门铁克方今正在测试ECC,其IT合营同伙Citrix,Akamai Technologies公司, AT&T集团,HID,瞻博网络等,个中Akamai Technologies公司现已接纳了尊重,并开端通往那一个样子努力。赛门铁克希望将ECC手艺应用到云和平运动动器材。

至于Crypto 库的编写翻译、安装情势,请自行度娘,这里就不累述了。

AES的Key经过接收方公钥加密和AES加密的内容 一同发送
给接收方,接收方通过和谐私钥先将加密后的AES_KEY解密,再通过解密得到的原始AES_KEY,并用该key解密发送方发送的从头到尾的经过,获得明文。
一般来讲图所示:

一. 去JDK的下载页面,下载

  服务器SSL证书基于HighlanderSA和ECC双模,假使ECC未启用,并不适用于自然的情形,就可以运维RubiconSA。赛门铁克也以一样的价位为客户提供新推出的ECC加密 SSL证书。

1、ECC加密算法

至于ECC加密算法的规律,请自行度娘,这里只列出算法的代码。

上面包车型客车代码已经在Windows 10、Visual Studio community 20一伍、Crypto 伍.陆.5条件下编写翻译运转通过

** 在Visual Studio中编写翻译时,必要将 "Properties -> C/C -> Code Generateion -> Runtime Library "改为 “Multi-threaded Debug (/MTd)”,如下图所示:**

韦德国际1946国际网址 1

Paste_Image.png

韦德国际1946国际网址 2

 


【韦德国际1946国际网址】SSL能还是不能够成功,AES和ECC的参差不齐加密。头文件:ecc_encryption_algorithm.h

#ifndef ECC_ENCRYPTION_ALGORITHM_H_
#define ECC_ENCRYPTION_ALGORITHM_H_

#include<string>

class EccEncryption
{
public:
    /// This method is used to generate keys for ECC encryption algorithm
    ///
    ///  param[in]  uiKeySize, length of key
    /// param[out]  sPrivateKey, private key
    /// param[out]  sPublicKey, public key
    void GenerateEccKeys(unsigned int uiKeySize, std::string& sPrivateKey, std::string& sPublicKey);

    /// This method is used to encrypt the input message using public key
    ///
    ///  param[in]  sPublicKey, public key generated by the first method
    /// param[out]  sMsgToEncrypt, message to encryppt
    /// return  the message encrypted using the input public key
    std::string Encrypt(const std::string& sPublicKey, const std::string& sMsgToEncrypt);

    /// This method is used to decrypt the input message using private key
    ///
    /// param[in] sPrivateKey, private key used to decrypt the cipher text
    /// param[in] sMsgToDecrypt, cipher text used to decrypt to get the plain text
    /// return decrypted plain text
    std::string Decrypt(const std::string& sPrivateKey, const std::string& sMsgToDecrytp);
}; 
#endif

AES和ECC混合加密.png

那个事物。那么些是为着解决暗中认可JDK中的加密强度的限定。不应用这一个大概会报错。

cpp文件: ecc_encryption_algorithm.cpp

#include "ecc_encryption_algorithm.h"
#include "eccrypto.h"
#include "osrng.h"
#include "oids.h"
#include "hex.h"
#include "filters.h"

void EccEncryption::GenerateEccKeys(unsigned int uiKeySize, std::string& sPrivateKey, std::string& sPublicKey)
{
    using namespace CryptoPP;
    // Random pool, the second parameter is the length of key
    // 随机数池,第二个参数是生成密钥的长
    AutoSeededRandomPool rnd(false, 1024);

    ECIES<ECP>::PrivateKey  privateKey;
    ECIES<ECP>::PublicKey   publicKey;
    // Generate private key
    // 生成私钥
    privateKey.Initialize(rnd, ASN1::secp521r1());
    // Generate public key using private key
    // 用私钥生成密钥
    privateKey.MakePublicKey(publicKey);

    ECIES<ECP>::Encryptor encryptor(publicKey);
    HexEncoder pubEncoder(new StringSink(sPublicKey));
    encryptor.DEREncode(pubEncoder);
    pubEncoder.MessageEnd();

    ECIES<ECP>::Decryptor decryptor(privateKey);
    HexEncoder prvEncoder(new StringSink(sPrivateKey));
    decryptor.DEREncode(prvEncoder);
    prvEncoder.MessageEnd();
}

std::string EccEncryption::Encrypt(const std::string& sPublicKey, const std::string& sMsgToEncrypt)
{
    using namespace CryptoPP;
    // If to save the keys into a file, FileSource should be replace StringSource
    // 如果需要把密钥保存到文件里,可以用 FileSource
    StringSource pubString(sPublicKey, true, new HexDecoder);
    ECIES<ECP>::Encryptor encryptor(pubString);

    // Calculate the length of cipher text
    // 计算加密后密文的长度
    size_t uiCipherTextSize = encryptor.CiphertextLength(sMsgToEncrypt.size());
    std::string sCipherText;
    sCipherText.resize(uiCipherTextSize);
    RandomPool rnd;
    encryptor.Encrypt(rnd, (byte*)(sMsgToEncrypt.c_str()), sMsgToEncrypt.size(), (byte*)(sCipherText.data()));
    return sCipherText;
}

std::string EccEncryption::Decrypt(const std::string& sPrivateKey, const std::string& sMsgToDecrytp)
{
    using namespace CryptoPP;
    StringSource privString(sPrivateKey, true, new HexDecoder);
    ECIES<ECP>::Decryptor decryptor(privString);

    auto sPlainTextLen = decryptor.MaxPlaintextLength(sMsgToDecrytp.size());
    std::string sDecryText;
    sDecryText.resize(sPlainTextLen);
    RandomPool rnd;
    decryptor.Decrypt(rnd, (byte*)sMsgToDecrytp.c_str(), sMsgToDecrytp.size(), (byte*)sDecryText.data());
    return sDecryText;
}

地点这种加密方法品质上相对是杠杠的,纵然自身向来不用现实的数据测试过,但也找过多数材质看了,加密算法速度超过

下载下来之后,需求将local_policy.jar 和 US_export_policy.jar替换掉D:Program FilesJavajdk1.8.0_91jrelibsecurity下边包车型地铁一样的七个jar包。

测试代码: test_main.h

#include "ecc_encryption_algorithm.h"
#include <iostream>

void main()
{
    std::string sStrToTest = std::string("Hello world. This is an example of Ecc
 encryption algorithm of Crypto   open source library.");
    EccEncryption ecc;
    std::string sPrivateKey, sPublicKey;
    ecc.GenerateEccKeys(1024, sPrivateKey, sPublicKey);

    std::cout << "Generated private key is : "<< std::endl;
    std::cout << sPrivateKey << std::endl;
    std::cout << "***********************************************************" << std::endl;

    std::cout << "Generated public key is : "<< std::endl;
    std::cout << sPublicKey << std::endl;
    std::cout << "***********************************************************" << std::endl;

    std::cout << "The message to be encrypted is : " << std::endl;
    std::cout << sStrToTest << std::endl;
    std::cout << "***********************************************************" << std::endl;

    std::string sEncryptResult = ecc.Encrypt(sPublicKey, sStrToTest);
    std::cout << "The result of encrypt is : " << std::endl;
    std::cout << sEncryptResult << std::endl;
    std::cout << "***********************************************************" << std::endl;

    std::string sDecryptResult = ecc.Decrypt(sPrivateKey, sEncryptResult);
    std::cout << "The result of decrypt is : " << std::endl;
    std::cout << sDecryptResult << std::endl;
    std::cout << "***********************************************************" << std::endl;
}

扩大:AES和ECC的交集加密还会有1种独特的现象,先来看一下ECC 数学函数 Q=dG; (Q是公钥 d是私钥 G是他们之间的关联);Q1 = d一G1; Q二=d二G二;那么能生产 key=Q一d二G二 = Q二d一G壹;
有未有亮点 1的公钥和二的私钥 二的公钥和一的私钥 他们能赢得二个均等的值 key。那么我们能或不可能把那一个一样的key 作为他们中间AES加减密的key呢?
那大家是还是不是足以在那么些发送进程少传二个AES密钥key‘的参数,那在传输的历程表露的新闻是还是不是有能够少,安全性是或不是会高级中学一年级点吧?
33人的ECC加密 和三13个人AES解密,经实行能够利用上述情势。

2. 下载bouncycastle的jar文件,加入classpath中。

运营结果如下图所示:

韦德国际1946国际网址 3

Paste_Image.png

 

上边上代码

ECCUtil:

[java] view plain copy

package com.zhuyun.encrypt;  

import java.security.KeyFactory;  

import java.security.KeyPair;  

import java.security.KeyPairGenerator;  

import java.security.PrivateKey;  

import java.security.PublicKey;  

import java.security.SecureRandom;  

import java.security.Security;  

import java.security.spec.PKCS8EncodedKeySpec;  

import java.security.spec.X509EncodedKeySpec;  

import javax.crypto.Cipher;  

import org.bouncycastle.jce.interfaces.ECPrivateKey;  

import org.bouncycastle.jce.interfaces.ECPublicKey;  

public class ECCUtil {  

static {  

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());  

    }  

//生成秘钥对  

public static KeyPair getKeyPair() throws Exception {  

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC");  

keyPairGenerator.initialize(256, new SecureRandom());  

        KeyPair keyPair = keyPairGenerator.generateKeyPair();  

return keyPair;  

    }  

//获取公钥(Base6四编码)  

public static String getPublicKey(KeyPair keyPair){  

        ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();  

byte[] bytes = publicKey.getEncoded();  

return AESUtil.byte2Base64(bytes);  

    }  

//获取私钥(Base64编码)  

public static String getPrivateKey(KeyPair keyPair){  

        ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate();  

byte[] bytes = privateKey.getEncoded();  

return AESUtil.byte2Base64(bytes);  

    }  

//将Base64编码后的公钥调换来PublicKey对象  

public static ECPublicKey string2PublicKey(String pubStr) throws Exception{  

byte[] keyBytes = AESUtil.base642Byte(pubStr);  

X509EncodedKeySpec keySpec =new X509EncodedKeySpec(keyBytes);  

KeyFactory keyFactory = KeyFactory.getInstance("EC", "BC");  

        ECPublicKey publicKey = (ECPublicKey) keyFactory.generatePublic(keySpec);  

return publicKey;  

    }  

//将Base64编码后的私钥转变来PrivateKey对象  

public static ECPrivateKey string2PrivateKey(String priStr) throws Exception{  

byte[] keyBytes = AESUtil.base642Byte(priStr);  

PKCS8EncodedKeySpec keySpec =new PKCS8EncodedKeySpec(keyBytes);  

KeyFactory keyFactory = KeyFactory.getInstance("EC", "BC");  

        ECPrivateKey privateKey = (ECPrivateKey) keyFactory.generatePrivate(keySpec);  

return privateKey;  

    }  

//公钥加密  

public static byte[] publicEncrypt(byte[] content, PublicKey publicKey) throws Exception{  

Cipher cipher = Cipher.getInstance("ECIES", "BC");  

        cipher.init(Cipher.ENCRYPT_MODE, publicKey);  

byte[] bytes = cipher.doFinal(content);  

return bytes;  

    }  

//私钥解密  

public static byte[] privateDecrypt(byte[] content, PrivateKey privateKey) throws Exception{  

Cipher cipher = Cipher.getInstance("ECIES", "BC");  

        cipher.init(Cipher.DECRYPT_MODE, privateKey);  

byte[] bytes = cipher.doFinal(content);  

return bytes;  

    }  

public static void main(String[] args) throws Exception {  

        KeyPair keyPair = ECCUtil.getKeyPair();  

本文由韦德国际1946发布于韦德国际1946国际网址,转载请注明出处:【韦德国际1946国际网址】SSL能还是不能够成功,

关键词: 日记本 iOS随笔 伟德betvictor