#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);
支付宝上传RSA公钥。项目环境:App支付,我是服务端,需要提供一坨参数给客户端,其中签名(RSA)设计到的私钥需要先将公钥上传到支付宝,下面开始讲解如何上传公钥到支付宝!!将rsa_private_key_pkcs8.pem和rsa_public_key.pem存放在本地配置文件,公钥用来反校验签名,私钥用来生成签名!第三步:开始上传到支付宝,在“合作伙伴密钥管理”--RSA加密--添加密钥,如果上传成功,那么现实“查看密钥”
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);
android、ios与服务器端php使用rsa加密解密通讯。需要注意的是,在初始化Cipher对象时,一定要指明使用"RSA/ECB/PKCS1Padding"格式如Cipher.getInstance("RSA/ECB/PKCS1Padding");打开rsa_public_key.pem文件,将上面代码的RSA_PUBLICE替换成其中内容即可。} - (int)getBlockSizeWithRSA_PADDING_TYPE:(RSA_PADDING_TYPE)padding_type { int len = RSA_size(_rsa);
RSA协议我不再描述,大家可以看http://www.di-mgt.com.au/rsa_alg.html。大家可以看到,相同密钥长度, 加密出来的密文长度要比明文要长,且OAEP的InBlock/OutBlock要比PKCS的InBlock/OutBlock要小,单从熵的角度,意味着OAEP padding模式引入更多的熵,OAEP要比PKCS更安全(事实上,为何提出OAEP代替PKCS,大家可以到RSA网站看看OAEP文档 http://www.rsasecurity.com/rsalabs/node.asp?id=2125)。
网络安全加密——DES、AES、RSA、Base64、MD5加密原理介绍,代码实现。/* DES加密 key为NSData形式 结果返回NSData./** AES-CBC模式加密,默认模式 @param data 要加密的数据 @param key 密钥支持128 192 256bit,16、24、32字节,长度错误将抛出异常 @param iv 初始化向量iv为16字节。三、RSA非对称加密。另外,我们也可以对称加密和非对称加密结合使用,对数据进行AES或DES加密,AES或DES的密钥随机生成,并使用RSA将其加密。
三. 原因: 实际使用RSA加解密算法通常有两种不同的方式,一种是使用对称密钥(比如AES/DES等加解密方法)加密数据,然后使用非对称密钥(RSA加解密密钥)加密对称密钥;第一种方式安全性高,复杂度也高,不存在加密数据长度限制问题,第二种方式安全性差一些,复杂度低,但是存在加密数据限制问题(即使用非对称密钥加密数据时,一次加密的数据长度是(密钥长度/8-11))。因为密钥越大,加密越强,但加密与解密的过程越慢。
但用在 AES算法上,因为 AES标准规定块大小必须是 16字节或者 24字节或者 32字节,不可能用 pkcs5的 8字节,所以 AES算法只能用 pkcs7填充。const cipher = forge.cipher.createCipher(''''''''AES-CBC'''''''', ''''''''这里是16字节密钥'''''''');cipher.start({ iv: ''''''''这里是16字节偏移量'''''''' });cipher.update(forge.util.createBuffer(''''''''这里是明文''''''''));cipher.finish();const result = forge.util.encode64(cipher.output.getBytes());
RSA算法详解及C语言实现。一、RSA算法 :如果 a 不是 p 的倍数, 也不是 q 的倍数时, 则 a^(p-1) == 1 mod p (费马小定理) => a^(k(p-1)(q-1)) == 1 mod p a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q 所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1 即 a^(k(p-1)(q-1)) == 1 mod pq => c == a^(k(p-1)(q-1)+1) == a mod pq.二、RSA 的安全性。
Android 与 .net 互通的RSA加密。然后我把Java工程里的代码拷贝到Android工程(android2.3)里,加密后的内容.net端竟然无法解密!!!比如Cipher.getInstance("RSA/ECB/PKCS1Padding"),或者Cipher.getInstance("RSA")均可,但用其加密的效果也会不一样;所以把Cipher cipher = Cipher.getInstance("RSA");改成。Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
* @param key 密钥。public static byte[] encryptByPrivateKey(byte[] data,String key)throws Exception{PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);public static byte[] decryptByPrivateKey(byte[] data,String key)throws Exception{public static byte[] encryptByPublicKey(byte[] data,String key)throws Exception{
生成与配置密钥 第一步 生成RSA密钥。OpenSSL> genrsa -out app_private_key.pem 1024 #生成私钥OpenSSL> pkcs8 -topk8 -inform PEM -in app_private_key.pem -outform PEM -nocrypt -out app_private_key_pkcs8.pem #Java开发者需要将私钥转换成PKCS8格式OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem #生成公钥OpenSSL> exit #退出OpenSSL程序。
PKCS是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。到1999年底,PKCS已经公布了以下标准: PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封[22]。 PKCS#3:定义Diffie-Hellman密钥交换协议[23]。 PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息[24]。 PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式[25]。
Android 外接sdk之支付宝。支付宝开放平台 最新sdk可以访问开放平台进行下载。10.生成RSA公钥输入“rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”命令回车后,在当前bin文件目录中会新增一个rsa_public_key.pem 文件,其文件为原始的商户公钥(请妥善保存该文件,PHP开发语言中需要使用该文件)RSA密钥使用逻辑:商户在使用RSA签名方式的支付宝接口时,真正会用到的密钥是商户私钥与支付宝公钥。
X.509 PKCS#8 PKCS#12区别PKI标准可以分为第一代和第二代标准[12]。到1999年底,PKCS已经公布了以下标准: PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。PKCS#3:定义Diffie-Hellman密钥交换协议。PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等。PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型。
2、PKCS#10中的信息:设备名字和其他可选信息实体证书的内容要多一些,CA还执行以下过程:(1)、产生随机对称密钥a+CA的信息+PKCS#10中的信息——执行HASH——得到HMAC散列值b(这是一个MD5的128位或SHA-1产生的160位指纹)(2)、用CA的私钥+a——运行RSA算法——得到加密的HMAC对称密钥c(3)、CA将HMAC散列值b、加密的HMAC对称密钥c和产生b、c的HMAC算法名字放到实体证书中。
void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc);int RSA_sign(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa);int RSA_verify(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigbuf, unsigned int siglen, RSA *rsa);
到1999年底,PKCS已经公布了以下标准: PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封[22]。PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型[28]。PKCS#8定义了私钥信息语法和加密私钥语法,其中私钥加密使用了PKCS#5标准。PKCS#9定 义了PKCS#6扩展证书、PKCS#7数字签名消息、PKCS#8私钥信息和PKCS#10证书签名请求中要用到的可选属性类型。
2 X509EncodedKeySpec:根据ASN.1标准进行密钥编码 3. DHPublicKey:是PublicKey的某种具体的形式 4. DHParameterSpec:随从着DH算法来使用的参数的集合 5. KeyPairGenerator:通过KeyPairGenerator来得到KeyPair类的对象 6. PrivateKey:私钥。
将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4.传输类似用户名的密码时.此时使用MD5直接将数据加密后提交到后台.因为后台不需要知道用户名密码.可以直接将接收到的经过MD5加密后数据存储到数据库.这也就是为什么许多应用只能重置密码,却不能找回密码.RSA密钥生成命令:pkcs8-topk8-inrsa_private_key.pem-outpkcs8_rsa_private_key.pem-nocrypt.随机生成RSA密钥对(默认密钥长度为1024)
密码类库Crypto++? Library 5.1的研究与应用。目前开放源代码的加密库中,密码类库Crypto++是比较流行的,目前的最高版本为Crypto++? Library 5.1,它实现了各种公开密钥算法、对称加密算法、数字签名算法、信息摘要算法以及其相关的其它算法等等,Crypto++? Library 5.1几乎包括了目前所有安全算法库,对密码类库Crypto++? Library 5.1的研究与应用对计算机网络安全的研究与发展有重大的实际意义。编译Crypto++ 4.2.crypto42.zip:
即可生成testkey.pk8 私钥文件,然后将先前制作的证书文件证书文件testkey.x509.pem和密钥文件testkey.pk8复制保存下来给apk签名:java -jar signapk.jar testkey.x509.pem testkey.pk8 unsigned.apk signed.apk.openssl pkcs8 -topk8 -in testkey.pem -inform PEM -passin pass:android -out testkey.pk8 -outform DER -nocrypt 或 openssl pkcs8 -topk8 -outform DER -in testkey.pem -inform PEM -out testkey.pk8 -nocrypt.
b)块加密的padding关注块加密的同时,还需要注意到padding的方式,这个会影响到能加密的内容大小的,比如PKCS1Padding需要留11字节保留信息的不过不知道是否跟密钥对长度相关,具体JAVA支持的参见security guides中的Cipher Algorithm Padding这个部分个人了解也略少,看网上有说对称加密支持PKCS5Padding(8字节Block)和PKCS7Padding(1到255字节不固定Block)非对称则支持PKCS1Padding 和 OAEP。