小编Jay*_*Jay的帖子

OpenSSL AES-256-CBC 加密错误,“最终块长度错误”Ruby

使用 Ruby 1.8.6。

我正在编写一个基本服务器,该服务器回显从客户端发送的消息的加密版本,以了解 Ruby 中对称加密的实现。该程序旨在接受套接字连接,共享其密钥,然后对其接收的数据进行加密,然后将其发送回客户端程序。然后,客户端使用共享密钥解密该消息,从而显示回显的消息。

我遇到的问题是返回消息导致“错误的最终块长度(OpenSSL::CipherError)”。进一步检查问题,删除decrypted << chiper.final允许我的客户端程序解密消息,但在末尾添加额外的字符或银行空格。我知道这是因为final关键字删除了额外的填充以允许 CBC 模式的 16 位块加密/解密,但我不知道如何正确工作。

这是简化的服务器代码(我知道这不安全,那不是重点,这只是一个学习应用程序)

require 'socket'
require 'thread'
require 'openssl'
require 'digest/sha1'

class Server 
@@static_id = 1
@connection_no 

@port
@server

@aes_cipher
@key

def initialize(p)
    #setting up server connections
    puts "Starting server"      
    @port = p
    puts "connections on port #{@port} will be accepted"
    @server = TCPServer.open(@port)

    #generate a secret key
    puts "creating secret key..."
    @aes_cipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
    @aes_cipher.encrypt
    @key = @aes_cipher.random_key
    @aes_cipher.key = @key
    puts "key: #{@key}" …
Run Code Online (Sandbox Code Playgroud)

ruby encryption openssl cryptography padding

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

cryptography ×1

encryption ×1

openssl ×1

padding ×1

ruby ×1