OpenSSL中算法记录
1、证书(X.509证书、PKCS#7证书、PKCS#12证书)
# pfx证书操作
path = Rails.root.join('config/cert/citicpay.pfx')
str = File.open(path).read.encode('utf-8')
str = Base64.decode64(str) rescue str
pfx = OpenSSL::PKCS12.new(str, pass)
{cer: pfx.certificate.to_pem, # X.509证书
key: pfx.key.to_pem, # 私钥
pub_key: pfx.certificate.public_key.to_pem # 公钥
}
2、秘钥(RAS)
OpenSSL::PKey::RSA.new 2048
OpenSSL::PKey::RSA.new File.read 'rsa.pem'
OpenSSL::PKey::RSA.new File.read('rsa.pem'), 'my pass phrase'
:to_der => '0\x81\x9F0\r\x06\t*\x86H\x86 ...' # 二进制数据
:to_pem => '-----BEGIN PUBLIC KEY-----\n ...' # 二进制数据的Base64编码
:to_text => 'Public-Key: (1024 bit)\nModulus ...' # 内容结构展示
3、密码()
decipher = OpenSSL::Cipher::AES.new(128, :CBC)
decipher.decrypt
decipher.key = key
decipher.iv = iv
plain = decipher.update(encrypted) + decipher.final
puts data == plain #=> true
# 参考:
https://cloud.tencent.com/developer/chapter/16473
https://www.jianshu.com/p/c93a993f8997
# java 工具包问题【Java采用PKCS#8标准】
https://www.hutool.cn/docs/#/crypto/%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86-AsymmetricCrypto
// 加解密的过程代码
# 加密
- PRIVATE_KEY = Base64("PKCS8 PRIVATE_KEY dir")
- RSA rsa = new RSA(PRIVATE_KEY, null);
- keyType = [privateKey or publicKey]
- encryptStr(String data, KeyType keyType, Charset charset);
- encrypt(StrUtil.bytes(data, StandardCharsets.UTF_8), keyType);
- Cipher cipher = SecureUtil.createCipher("RSA");
# 加密
- int encryptBlockSize = encryptBlockSize = ((RSAKey) getKeyByType(keyType)).getModulus().bitLength() / 8 - 11;
# 解密
- int encryptBlockSize = encryptBlockSize = ((RSAKey) getKeyByType(keyType)).getModulus().bitLength() / 8;
if (data.length <= encryptBlockSize) {
return this.cipher.doFinal(data, 0, dataLength); // 不足分段
}else{
return doFinalWithBlock(data, maxBlockSize); // 分段解密
}
int dataLength = data.length;
int offSet = 0;
int remainLength = dataLength; // 剩余长度
int blockSize;
// 对数据分段处理
while (remainLength > 0) {
blockSize = Math.min(remainLength, maxBlockSize);
out.write(cipher.doFinal(data, offSet, blockSize));
offSet += blockSize;
remainLength = dataLength - offSet;
}
return out.toByteArray();
HexUtil.encodeHexStr(byte[] res)
# 分段加密思路;RSA用PKCS#1标准
def encrypt_params(data)
rsa = OpenSSL::PKey::RSA.new(rsa_pub_key)
arr = data.unpack("C*").each_slice(rsa.n.num_bytes - 11)
arr = arr.map { |str_bytes| rsa.public_encrypt(str_bytes.pack("C*")) }
Base64.strict_encode64(arr.join)
end
def decrypt_result_data(data)
rsa = OpenSSL::PKey::RSA.new(rsa_pri_key)
arr = Base64.decode64(data).unpack("C*").each_slice(rsa.n.num_bytes)
arr = arr.map { |str_bytes| rsa.private_decrypt(str_bytes.pack("C*")) }
arr.join.force_encoding('UTF-8')
end
分享到:
相关推荐
标题中的 "openssl 版本集合含 delphi7 调用例子" 暗示了这是一个包含多个 OpenSSL 版本的集合,具体为 096b、096k、096m,这些版本可能对应不同的功能优化或安全修复。在实际开发中,选择合适的 OpenSSL 版本非常...
标题中的"openssl_openssl_android_shirtiut_"暗示了这个压缩包可能包含了关于在iOS和...总的来说,这个压缩包可能是一个包含所有这些知识点的资源集合,帮助开发者在iOS和Android平台上成功地集成和使用OpenSSL。
在压缩包中只有一个名为"openssl"的文件,这可能是一个包含了编译后的动态链接库(dll)、静态链接库(lib)以及相关的头文件(h)的集合。这些文件对于开发者来说至关重要,因为它们是将OpenSSL的功能整合到他们...
总的来说,这些文档集合提供了关于OpenSSL中关键组件的深入理解,对于开发安全应用、构建和管理PKI系统以及进行安全通信的IT专业人士来说,这些都是必不可少的知识点。通过学习这些内容,你可以更好地理解和利用...
"OpenSSL-Win32.zip" 文件就是专门为Windows 32位平台提供的OpenSSL库集合。这个压缩包中包含了运行在32位Windows环境下的所有必需文件,以便开发者在他们的程序中集成OpenSSL的功能。 OpenSSL的核心组件包括: 1....
OpenSSL是一个开源的库,主要用于实现安全套接层(SSL)和传输层安全(TLS)协议,同时也包含了用于加密算法、证书操作等大量功能。本文将深入探讨OpenSSL 1.0.2j版本在Win64平台上的SDK,以及如何利用它进行开发...
"openssl学习资料大全" 这个标题表明了这是一份关于OpenSSL的综合学习资源集合。OpenSSL是一个开源项目,提供了一套强大的安全套接层(SSL)和传输层安全(TLS)协议实现,以及相关工具,包括加密算法、证书管理等。...
1. **Include文件**:这是包含所有OpenSSL库函数定义和声明的头文件集合,开发者在编写代码时需要引用这些头文件,以便调用OpenSSL提供的加密和安全功能。例如,`#include <openssl/ssl.h>` 可以引入SSL/TLS相关的...
这个教程及源码集合可以帮助你深入理解OpenSSL的原理和实际应用。 **一、OpenSSL教程** 1. **SSL与TLS协议**:SSL(Secure Socket Layer)是早期的网络安全协议,而TLS(Transport Layer Security)是其升级版,...
OpenSSL提供了专门的堆栈实现,用于高效地管理证书链、密钥集合等。 #### 3.2 数据结构 OpenSSL堆栈通常以链表的形式实现,支持快速的插入和删除操作。 #### 3.3 源码 OpenSSL堆栈的实现细节可以在其源代码中找到...
总的来说,这个压缩包提供了一套方便C语言开发人员在Visual C++环境下使用OpenSSL的头文件集合,涵盖了SSL/TLS协议以及加密算法,对于构建安全的网络应用程序非常有帮助。正确理解和使用这些头文件是确保程序安全性...
这个压缩包集合了大量关于openssl的资源,适合用于深入学习和理解openssl的各种功能和应用。openssl是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现库,它同时也包含了各种加密算法,如AES、DES和RSA,...
总结来说,"vcpkg-openssl-3.1.2-windows-x86-64.zip" 提供了一个方便的OpenSSL库集合,包括了适用于Windows 64位系统的动态库和静态库,它们都是通过vcpkg工具编译得到的,旨在简化开发人员集成OpenSSL到其项目中的...
OpenSSL是一个强大的安全套接字层...总之,这个OpenSSL库文件和头文件集合是针对Visual Studio 2013开发的,适用于在C或C++项目中实现加密解密功能。开发者应当熟悉其基本概念和用法,以充分利用这个强大的密码学工具。
总之,"openssl1.1.1g-静态库.rar" 是 OpenSSL 1.1.1g 版本的静态库文件集合,适用于多个操作系统平台,包括 32 位和 64 位的 Windows 以及 64 位 Ubuntu。这个库对于需要在不同环境中实现安全通信的开发者来说,...
4. **库文件(.lib/.dll)**: 实现OpenSSL功能的二进制代码,程序链接时需要这些库才能调用OpenSSL的函数。 5. **openssl.cnf**: OpenSSL的配置文件,可以自定义加密算法、证书参数等。 6. **bin目录**: 包含OpenSSL...
总的来说,这个OpenSSL的64位Windows版本提供了构建和维护安全网络连接所需的全部组件,无论是对于开发还是运维,都是一个不可或缺的工具集合。正确理解和使用这些组件,对于提升网络安全性和可靠性具有重要意义。
《security_with_OpenSSL》是一个关于OpenSSL安全编程的资源集合,适合那些想要深入理解并有效应用OpenSSL在网络安全中的专业人士。这个压缩包包含了四部分重要资料,分别是对OpenSSL API的概述、安全握手的实现、...
提供的文件"openssh9.0-openssl1.1.1k-rpm"可能是这些包的集合。 4. **安装OpenSSL**:使用`rpm -Uvh openssl-1.1.1k.rpm`命令安装或升级OpenSSL。`-U`表示升级,`-v`是详细模式,`-h`则显示进度条。 5. **处理...