2017-10-02 10 views
0

RubyでAES暗号化に関するプロジェクトを進めています。 Rubyの暗号化ライブラリはデータを文字列として取得し、暗号化を開始します(例:http://ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL/Cipher.html)。しかし私はバイト配列のようなデータを持っています。Rubyでバイトデータを暗号化する

seed_V = [0x08,0x06,0x02,0x01,0x03,0x07,0x01] 

私はバイト単位でデータを提供し、JavaやC#、私はRubyで暗号化の同じ種類を行うことができますどのように(Using AES encryption in C#) の方法のように暗号化する ?

答えて

0

たちはAES-CBCを使用しています考えてみましょうそのCBCのブロックサイズ

seed_v = [0x08,0x06,0x02,0x01,0x03,0x07,0x01,0x08,0x06,0x02,0x01,0x03,0x07,0x01,0x08,0x01] 
iv = seed_v.pack('C*') 
data = "hello!" 

crypto = AesCrypto.new 
ciphertext = crypto.encrypt(iv, data) 
puts ciphertext 
data = crypto.decrypt(iv, ciphertext) 
puts data 

ivを選択する方法がよくわからない場合、これは便利な答えです:

CBC with a fixed or random IV

0

あなたは、文字列の中に、あなたのバイト配列をパックすることができます:

require 'openssl' 

class AesCrypto  
    def encrypt(iv, data) 
    aes = ::OpenSSL::Cipher.new('AES-128-CBC') 
    aes.encrypt 
    aes.iv = iv 
    aes.key = ciphering_key 
    aes.update(data) + aes.final 
    end 

    def decrypt(iv, encrypted_data) 
    aes = ::OpenSSL::Cipher.new('AES-128-CBC') 
    aes.decrypt 
    aes.iv = iv 
    aes.key = ciphering_key 
    aes.update(encrypted_data) + aes.final 
    end 

    private 

    def ciphering_key 
    # get from config or storage, etc 
    'test_key_test_key' 
    end 
end 

iv長さは等しくなければなりませんのでご注意ください。

seed_V = [0x08,0x06,0x02,0x01,0x03,0x07,0x01] 
=> [8, 6, 2, 1, 3, 7, 1] 

seed_V.pack('C*') 
=> "\b\x06\x02\x01\x03\a\x01" 

seed_V.pack('C*').unpack('C*') 
=> [8, 6, 2, 1, 3, 7, 1] 

http://www.rubydoc.info/stdlib/core/Array%3Apack

関連する問題