3DES、AES、RC6、TEA、RSA、MD5、SHA1、SHA256加密源码大聚...3DES、AES、RC6、TEA、RSA、MD5、SHA1、SHA256大聚齐。//TEA加密,数组dat里面的新内容就是加密后的数据。测试方法与过程:DES算法和AES算法都有现成的加密软件,把软仿真计算过的数据和人家的软件做对比,并能解密还原为原数据。RC6、TEA、SHA-256暂时没有找到测试软件,通过不同的密钥看到加密后的数据被完全打散或变形,并能还原为原数据(SHA-256除外)。
OpenSSL使用指南linfb@sdu.edu.cn.4.3Hash算法。用对称算法加密,后来出现了非对称算法,即公钥算法。由于公钥算法太慢,因此实际使用的时候常用公钥算法传输会话密钥,再用对称算法和。几类:对称算法、公钥算法、散列算法、随机数产生算法等。RC4密码算法是流算法,也叫序列算法。OpenSSL中RC4算法有两个函数:RC4_set_key()设置密钥,RC4()加解密。RSA加密函数RSA_public_encrypt()使用公钥部分,解密函数RSA_private_decrypt()
40 //通过校验,看看strDigest是否对应原来的message 41 if( bIsSuccess ) 42 { 43 cout << "sussessive verify" << endl; 44 cout << "origin string is: " << strMessage << endl << endl; 45 } 46 else 47 { 48 cout << "fail!" << endl; 49 } 50 51 //通过strDigest2与strMessage进行校验,要是相等, 52 //就证明strDigest2是对应的strMessage2跟strMessage1相等。
//其实key和iv一般应该从别的地方得到,这里固定了至少作为演示使用的 unsigned char key[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; unsigned char iv[]={1,2,3,4,5,6,7,8}; char int ext[]="SomeCryptoText"; EVP_CIPHER_CTX ctx; FILE* out; EVP_CIPHER_CTX_init(&ctx); EVP_EncryptInit_ex(&ctx,EVP_bf_cbc(),NULL,key,iv); if(!EVP_EncryptUpdate(&ctx,outbuf,&outlen,intext,strlen(intext))) {
int (*rsa_pub_enc)(int flen,const unsigned char *from,unsigned char *to,RSA *rsa,int padding);int (*rsa_pub_dec)(int flen,const unsigned char *from,unsigned char *to,RSA *rsa,int padding);int (*rsa_priv_enc)(int flen,const unsigned char *from,unsigned char *to,RSA *rsa,int padding);int (*rsa_priv_dec)(int flen,const unsigned char *from,unsigned char *to,RSA *rsa,int padding);flen=RSA_size(r);
比如生成RSA密钥: from M2Crypto import BIO, RSA def genrsa(): #这函数生成一个1024位的RSA密钥,将其转化成PEM格式返回 bio=BIO.MemoryBuffer() rsa=RSA.gen_key(1024, 3, lambda *arg:None) rsa.save_key_bio(bio, None) return bio.read_all() RSA.gen_key()是一个工厂方法,它返回一个存储了新的RSA密钥的RSA.RSA()实例。保存RSA密钥 RSA类型封装了一些可以使用RSA密钥进行的操作。
【Blowfish算法】函数:EVP_bf_cbc(void),EVP_bf_ecb(void),EVP_bf_cfb(void),EVP_bf_ofb(void)说明:分别是CBC方式、ECB方式、CFB方式以及OFB方式的Blowfish算法,该算法的密钥长度是可变的【CAST算法】函数:EVP_cast5_cbc(void),EVP_cast5_ecb(void),EVP_cast5_cfb(void),EVP_cast5_ofb(void)说明:分别是CBC方式、ECB方式、CFB方式以及OFB方式的CAST算法,该算法的密钥长度是可变的。
OpenSSL: 消息摘要算法用openssl的engine机制实现chiper,digest的替换遇到问题了,到底EVP是怎么样调用init,updata,final以及init,updata,final应该如何实现呢?unsigned char *MD5(const unsigned char *d, unsigned long n, unsigned char *md);md = MD5((const unsigned char*)buf,strlen(buf),NULL);MD5_Init初始化MD5_CTX结构,MD5_Update计算摘要,MD5_Final输出摘要值。len = BIO_gets(bio_md,(char*)md,EVP_MAX_MD_SIZE);
openssl之EVP系列之2---对称加密算法概述对称加密算法封装的函数系列名字是以EVP_Encrypt*...*开头的,其实,这些函数只是简单调用了EVP_Cipher*...*系列的同名函数,换一个名字可能是为了更好的区别和理解。EVP_Cipher*...*得以实现的一个基本结构是下面定义的一个算法结构,它定义了EVP_Cipher系列函数应该采用什么算法进行数据处理,其定义如下(evp.h):typedef struct evp_cipher_st{const EVP_CIPHER* cipher;
openssl之EVP系列之12---EVP_Seal系列函数介绍openssl之EVP系列之12---EVP_Seal系列函数介绍 ---根据openssl doc\crypto\EVP_SealInit.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net ,发布于:http://openssl.126.com 之openssl专业论坛,版本:openssl-0.9.7) 改系列函数是相当于完成一个电子信封的功能,它产生一个随机密钥,然后使用一个公钥对改密钥进行封装,数据可以使用随机密钥进行加密。
EVP_PKEY *pkey=NULL;//将rsa对象赋给EVP_PKEY结构EVP_PKEY_assign_RSA(pkey,rsa);//初始化摘要算法const char *digestName="sha1";//"md5";const EVP_MD *md;md=EVP_get_digestbyname(digestName);if(!md)//结束摘要计算unsigned int md_len;unsigned char md_value[EVP_MAX_MD_SIZE];EVP_DigestFinal(&mdctx,md_value,&md_len);EVP_MD_CTX_cleanup(&mdctx);printf("摘要值是:(类型=%s;长度=%d 字节):",digestName,md_len);
int RSA_private_encrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding);int RSA_public_decrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding);int RSA_public_encrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding);int RSA_private_decrypt(int flen, unsigned char *from, unsigned char *to, RSA *rsa, int padding);
CAliSecXBuffer::CAliSecXBuffer(unsigned long) in AlipaySDK.CAliSecXBuffer::_copy(unsigned char const*, unsigned long) in AlipaySDK.(3)openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem.WuTiandeiMac:FPHClientNew wutianshi$ opensslOpenSSL>OpenSSL>OpenSSL>OpenSSL>OpenSSL> genrsa -out rsa_private_key.pem 1024Generating RSA private key, 1024 bit long modulus....................
openssl rsa 加密。1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define OPENSSLKEY "test.key" 8 #define PUBLICKEY "test_pub.key" 9 #define BUFFSIZE 102410 char* my_encrypt(char *str,char *path_key);
#include <openssl/rsa.h>//构建RSA数据结构 bne =BN_new(); bnd =BN_new(); bnn =BN_new(); ret =BN_set_word(bne, e); BN_hex2bn(&bnd, PRIVATE); BN_hex2bn(&bnn, MODULUS);//准备输出的加密数据结构 flen= RSA_size(r);// - 11; encData= (unsigned char *)malloc(flen); bzero(encData, flen);//memset(encData, 0, flen);ret= RSA_public_decrypt(flen, encData, decData,r, RSA_NO_PADDING);
# 使用参数文件dsaparam.pem生成DSA私钥匙,# 采用3DES加密后输出到文件dsaprivatekey.pem$ openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem.# 用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt$ openssl sha1 -out digest.txt file.txt[root@server02 ~]# openssl sha1 -out digest.txt file.txt[root@server02 ~]# cat digest.txt SHA1(file.txt)= cf017022db32f04cb57d2ec1ae6b39751a6155e4.
aNULL 包含了非验证的 Diffie-Hellman 密钥交换,这会受到中间人(MITM)攻击eNULL 包含了无加密的算法(明文)EXPORT 是老旧的弱加密算法,是被美国法律标示为可出口的RC4 包含的加密算法使用了已弃用的 ARCFOUR 算法DES 包含的加密算法使用了弃用的数据加密标准(DES)SSLv2 包含了定义在旧版本 SSL 标准中的所有算法,现已弃用MD5 包含了使用已弃用的 MD5 作为哈希算法的所有算法更多设置。
nginx新版ssl握手不过的问题Nginx新版中启用了算法限制,只需将算法级别调低即可,或者直接启用全部算法。ssl_ciphers ALL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;ssl_ciphers.ssl_ciphers ciphers.This directive describes the list of cipher suites the server supports for establishing a secure connection.Since nginx version 1.0.5, the default ciphers are:ssl_ciphers HIGH:!
RSA* rsa=RSA_generate_key(1024,//公钥模长 RSA_3, //第三个费尔玛数作为公钥中的e prime_generate_status, //素数产生状态的回调函数 NULL //传给回调函数的参数 ); if(NULL==rsa) { printf("生成RSA密钥对失败\n"); return NULL; }//隐藏RSA密钥抵御定时攻击 RSA_blinding_on(rsa,NULL);printf("\n成功生成RSA密钥对\n");
基于"消息摘要"的算法"消息摘要"(Message Digest)是一种能产生特殊输出格式的算法,这种加密算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是"摘要",被"摘要"的数据内容与原数据有密切联系,只要原数据稍有改变,输出的"摘要"便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。
E:\OpenSSL\foo>openssl enc -des3 -a -k 123 -in a.txt -out a.des3base64E:\OpenSSL\foo>openssl enc -des3 -d -a -k 123 -in a.des3base64 -out b.txtE:\OpenSSL\foo>diff a.txt b.txt-A 如果指定-a 选项,在每一行上进行base64处理。
大家可能看到DES都分des-ecb, des-cbc, des-cfb这些。用bf+cbc算法加密[cpp] view plain copy print?openssl bf -a -salt -in file.txt -out file.bf.
一般的数据加密可以在通信的三个层次来实现:链路加密、节点加密和端到端加密。对于链路加密(又称在线加密),所有消息在被传输之前进行加密,在每一个节点对接收到的消息进行解密,然后先使用下一个链路的密钥对消息进行加密,再进行传输。尽管节点加密能给网络数据提供较高的安全性,但它在操作方式上与链路加密是类似的:两者均在通信链路上为传输的消息提供安全性;都在中间节点先对消息进行解密,然后进行加密。
各种加密算法比较算法选择:对称加密AES,非对称加密: ECC,消息摘要: MD5,数字签名:DSA对称加密算法(加解密密钥相同)慢,适合小数据量加解密或数据签名算法选择(从性能和安全性综合)对称加密: AES(128位),非对称加密: ECC(160位)或RSA(1024),消息摘要: MD5数字签名:DSA轻量级:TEA、RC系列(RC4),Blowfish (不常换密钥)速度排名(个人估测,未验证):IDEA <DES <GASTI28<GOST<AES<RC4<TEA<Blowfish.密钥长度可变、16轮迭代。
(原创)System.Security.Cryptography中定义的加密算法System.Security.Cryptography中定义的加密算法这两天因为要用到一些加解密功能,查了下.net里打包的加密算法,发现还挺多的,索性全查了一遍写个笔记,方便以后查找。与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。5、RSA1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。
__int64 8 long long, signed longlong –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 unsigned __int64 8 unsigned longlong 0 to18,446,744,073,709,551,615.如果是无符号的,将unsigned_int64转化为char*,可以使用sprintf,用法如下:还有一种方法是使用函数_ui64toa_s将unsigned _int64转化为char*, _strtoui64函数则可以将char*转化为unsigned _int64。
openssl之EVP系列之13---EVP_Open系列函数介绍 ---根据openssl doc\crypto\EVP_OpenInit.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net ,发布于:http://openssl.cn 之openssl专业论坛,版本:openssl-0.9.7) 本系列函数相对于EVP_Seal系列函数,是进行信封加密的。