実現したいこと
RailsでDBの暗号化されたdataカラムを復号化してindexで表示したいです。
復号化としては、logidカラムの文字列から重複した文字を削除した文字列を復号鍵として、opensslのaes-256-ecb方式で復号化しているものとなります
そのコードをruby単体ファイルで作成して実行できることを確認しています。
それをrailsにどう組み込めばいいのかがわかりません。
特に、DBのカラム値を呼び出し処理して返すのがどうすればいいかよくわかりません。
お力をかしてください
単体ファイルでの復号化コード
ruby
1require 'openssl' 2require 'base64' 3 4logid = "" 5data = "" 6 7cipher = OpenSSL::Cipher.new("aes-256-ecb") 8cipher.decrypt 9key = logid.each_char.uniq.join #logidの文字列の文字を取り出し、重複する要素を削除して新しく文字列を作成 10cipher.key = (key + "\0"*32)[0,32] 11decrypted = cipher.update(Base64.decode64 data) + cipher.final 12 13p decrypted
###Railsファイル
#personal_logs_controller.rb class PersonalLogsController < ApplicationController before_action :set_personal_log, only: [:show, :edit, :update, :destroy] def index @personal_logs = PersonalLog.all end def show end def new @personal_log = PersonalLog.new end def edit end def create @personal_log = PersonalLog.new(personal_log_params) respond_to do |format| if @personal_log.save format.html { redirect_to @personal_log, notice: 'Personal log was successfully created.' } format.json { render :show, status: :created, location: @personal_log } else format.html { render :new } format.json { render json: @personal_log.errors, status: :unprocessable_entity } end end end def update respond_to do |format| if @personal_log.update(personal_log_params) format.html { redirect_to @personal_log, notice: 'Personal log was successfully updated.' } format.json { render :show, status: :ok, location: @personal_log } else format.html { render :edit } format.json { render json: @personal_log.errors, status: :unprocessable_entity } end end end def destroy @personal_log.destroy respond_to do |format| format.html { redirect_to personal_logs_url, notice: 'Personal log was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_personal_log @personal_log = PersonalLog.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def personal_log_params params.fetch(:personal_log, {}) end end
#index.html.erb <p id="notice"><%= notice %></p> <h1>Personal Logs</h1> <table border = "5"> <thead> <tr> <th>data</th> </tr> </thead> <% @personal_logs.each do |personal_log| %> <tbody> <tr> <td><%= personal_log.decrypted_data %></td> </tr> </tbody> <% end %> </table>
ruby
1#model/personal_log.rb 2require 'openssl' 3require 'base64' 4 5class PersonalLog < ApplicationRecord 6 def decrypted_data 7 return self.id 8 end 9end
補足情報(FW/ツールのバージョンなど)
OS:ubuntu18
ruby:2.5.1
Mysql
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/17 01:55
2018/07/17 02:01
2018/07/17 02:22 編集
2018/07/17 02:25
2018/07/17 02:30
2018/07/17 02:34
2018/07/17 02:35
2018/07/17 02:46
2018/07/17 02:50 編集
2018/07/17 03:23