`

OpenSSL功能集合

阅读更多

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

 

分享到:
评论

相关推荐

    indy9 openssl版本集合含delphi7调用例子

    标题中的 "openssl 版本集合含 delphi7 调用例子" 暗示了这是一个包含多个 OpenSSL 版本的集合,具体为 096b、096k、096m,这些版本可能对应不同的功能优化或安全修复。在实际开发中,选择合适的 OpenSSL 版本非常...

    openssl_openssl_android_shirtiut_

    标题中的"openssl_openssl_android_shirtiut_"暗示了这个压缩包可能包含了关于在iOS和...总的来说,这个压缩包可能是一个包含所有这些知识点的资源集合,帮助开发者在iOS和Android平台上成功地集成和使用OpenSSL。

    openssl-1.0.1e

    在压缩包中只有一个名为"openssl"的文件,这可能是一个包含了编译后的动态链接库(dll)、静态链接库(lib)以及相关的头文件(h)的集合。这些文件对于开发者来说至关重要,因为它们是将OpenSSL的功能整合到他们...

    openssl文档_openssl_x509_

    总的来说,这些文档集合提供了关于OpenSSL中关键组件的深入理解,对于开发安全应用、构建和管理PKI系统以及进行安全通信的IT专业人士来说,这些都是必不可少的知识点。通过学习这些内容,你可以更好地理解和利用...

    OpenSSL-Win32.zip

    "OpenSSL-Win32.zip" 文件就是专门为Windows 32位平台提供的OpenSSL库集合。这个压缩包中包含了运行在32位Windows环境下的所有必需文件,以便开发者在他们的程序中集成OpenSSL的功能。 OpenSSL的核心组件包括: 1....

    openssl-1.0.2j_win64

    OpenSSL是一个开源的库,主要用于实现安全套接层(SSL)和传输层安全(TLS)协议,同时也包含了用于加密算法、证书操作等大量功能。本文将深入探讨OpenSSL 1.0.2j版本在Win64平台上的SDK,以及如何利用它进行开发...

    openssl学习资料大全

    "openssl学习资料大全" 这个标题表明了这是一份关于OpenSSL的综合学习资源集合。OpenSSL是一个开源项目,提供了一套强大的安全套接层(SSL)和传输层安全(TLS)协议实现,以及相关工具,包括加密算法、证书管理等。...

    openssl 1.0.0 windows 库

    1. **Include文件**:这是包含所有OpenSSL库函数定义和声明的头文件集合,开发者在编写代码时需要引用这些头文件,以便调用OpenSSL提供的加密和安全功能。例如,`#include &lt;openssl/ssl.h&gt;` 可以引入SSL/TLS相关的...

    openssl教程及最新源码

    这个教程及源码集合可以帮助你深入理解OpenSSL的原理和实际应用。 **一、OpenSSL教程** 1. **SSL与TLS协议**:SSL(Secure Socket Layer)是早期的网络安全协议,而TLS(Transport Layer Security)是其升级版,...

    openssl-include.rar_C常用头文件_openssl_ssl_visual c

    总的来说,这个压缩包提供了一套方便C语言开发人员在Visual C++环境下使用OpenSSL的头文件集合,涵盖了SSL/TLS协议以及加密算法,对于构建安全的网络应用程序非常有帮助。正确理解和使用这些头文件是确保程序安全性...

    openssl 相关大全

    这个压缩包集合了大量关于openssl的资源,适合用于深入学习和理解openssl的各种功能和应用。openssl是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现库,它同时也包含了各种加密算法,如AES、DES和RSA,...

    vcpkg-openssl-3.1.2-windows-x86-64.zip

    总结来说,"vcpkg-openssl-3.1.2-windows-x86-64.zip" 提供了一个方便的OpenSSL库集合,包括了适用于Windows 64位系统的动态库和静态库,它们都是通过vcpkg工具编译得到的,旨在简化开发人员集成OpenSSL到其项目中的...

    OpenSSL加密解密库

    OpenSSL是一个强大的安全套接字层...总之,这个OpenSSL库文件和头文件集合是针对Visual Studio 2013开发的,适用于在C或C++项目中实现加密解密功能。开发者应当熟悉其基本概念和用法,以充分利用这个强大的密码学工具。

    openssl1.1.1g-静态库.rar

    总之,"openssl1.1.1g-静态库.rar" 是 OpenSSL 1.1.1g 版本的静态库文件集合,适用于多个操作系统平台,包括 32 位和 64 位的 Windows 以及 64 位 Ubuntu。这个库对于需要在不同环境中实现安全通信的开发者来说,...

    已经编译好的windows下使用的openssl

    4. **库文件(.lib/.dll)**: 实现OpenSSL功能的二进制代码,程序链接时需要这些库才能调用OpenSSL的函数。 5. **openssl.cnf**: OpenSSL的配置文件,可以自定义加密算法、证书参数等。 6. **bin目录**: 包含OpenSSL...

    openssl-1.0.2u-x64_86-win64.zip

    总的来说,这个OpenSSL的64位Windows版本提供了构建和维护安全网络连接所需的全部组件,无论是对于开发还是运维,都是一个不可或缺的工具集合。正确理解和使用这些组件,对于提升网络安全性和可靠性具有重要意义。

    security_with_OpenSSL

    《security_with_OpenSSL》是一个关于OpenSSL安全编程的资源集合,适合那些想要深入理解并有效应用OpenSSL在网络安全中的专业人士。这个压缩包包含了四部分重要资料,分别是对OpenSSL API的概述、安全握手的实现、...

    openssh9.0和openssl1.1.1k的rpm升级包

    提供的文件"openssh9.0-openssl1.1.1k-rpm"可能是这些包的集合。 4. **安装OpenSSL**:使用`rpm -Uvh openssl-1.1.1k.rpm`命令安装或升级OpenSSL。`-U`表示升级,`-v`是详细模式,`-h`则显示进度条。 5. **处理...

Global site tag (gtag.js) - Google Analytics