C#与Ruby跨语言AES加解密兼容问题求助,需兼容现有C#加密逻辑
C# AES加密逻辑迁移Ruby(兼容旧密文)修正方案
核心问题梳理
- 密钥使用错误:C#代码存在冗余逻辑,虽然生成了PBKDF2派生密钥,但实际调用
CreateEncryptor/CreateDecryptor时传入的是类顶部硬编码的32位KEY常量,而非派生出来的密钥。原有Ruby代码错误使用了PBKDF2派生的密钥,和C#实际使用的密钥不匹配。 - 密文结构不匹配:C#输出的密文结构为
[IV长度(4字节小端int)] + [IV内容] + [密文内容],但原有Ruby代码生成/解析的密文结构是直接[IV内容] + [密文内容],缺少前4位的长度标识,解析C#密文时取IV的偏移完全错误。 - 加密参数对齐问题:需确认Ruby加密库的算法模式为AES-256-CBC,填充方式为PKCS7,和C# RijndaelManaged默认参数保持一致。
修正后的Ruby实现代码
require 'openssl' require "base64" # 对应C#里硬编码的KEY常量 CS_HARDCODED_KEY = [222, 11, 149, 155, 122, 97, 170, 8, 40, 250, 67, 227, 129, 147, 159, 81, 108, 136, 221, 41, 247, 146, 114, 133, 232, 31, 33, 196, 130, 88, 136, 238].pack('c*') # 加密算法参数 对应AES-256-CBC,IV默认长度16字节 CIPHER_ALG = 'aes-256-cbc' # 解密C#生成的密文方法 def decrypt_from_csharp(encrypted_str, key) # 1. Base64解码 raw_bytes = Base64.decode64(encrypted_str) # 2. 读取前4字节获取IV长度(C# BitConverter默认是Windows小端序) iv_len = raw_bytes[0,4].unpack1('l<') # 3. 读取IV内容 iv = raw_bytes[4, iv_len] # 4. 读取实际密文内容 ciphertext = raw_bytes[4 + iv_len..-1] # 5. 执行AES解密 decipher = OpenSSL::Cipher.new(CIPHER_ALG) decipher.decrypt decipher.key = key decipher.iv = iv # 自动处理PKCS7填充 decipher.update(ciphertext) + decipher.final end # 生成兼容C#的密文方法(可选,用于双向兼容) def encrypt_for_csharp(plain_text, key) cipher = OpenSSL::Cipher.new(CIPHER_ALG) cipher.encrypt cipher.key = key iv = cipher.random_iv # 构造C#兼容的密文结构:4字节小端IV长度 + IV + 密文 iv_len_bytes = [iv.length].pack('l<') ciphertext = cipher.update(plain_text) + cipher.final raw_encrypted = iv_len_bytes + iv + ciphertext Base64.encode64(raw_encrypted) end # 测试示例 # csharp_encrypted_text = "替换为C#生成的测试密文" # puts "解密结果:#{decrypt_from_csharp(csharp_encrypted_text, CS_HARDCODED_KEY)}" # 加密兼容测试 plain_text = "fiskbullsmacka med extra sovs" encrypted = encrypt_for_csharp(plain_text, CS_HARDCODED_KEY) puts "生成的兼容C#密文:#{encrypted}" puts "解密校验:#{decrypt_from_csharp(encrypted, CS_HARDCODED_KEY)}"
额外说明
原有Ruby代码中的PBKDF2派生逻辑在C#侧实际未生效,属于C#代码的冗余逻辑,如果没有特殊历史需求可以直接移除相关代码。如果需要保留双向兼容,加密时按照上述代码的密文结构生成即可,C#侧无需修改即可正常解密Ruby生成的密文。
内容的提问来源于stack exchange,提问作者Vishwanath Heddoori
相关产品推荐
相关产品推荐

