#!/usr/koeki/bin/ruby #coding: euc-jp require 'prime' def rsa_crypt(prime_p, prime_q) gcd, lcm = (prime_p - 1).gcdlcm(prime_q -1) n = prime_p * prime_q crypt = Array.new for k in 1 .. n - 1 power = Array.new for l in 1 .. lcm + 1 rem = k ** l % n power << rem end crypt << power end crypt end r = 3 # とりあえずきめうち q = 7 # とりあえずきめうち s = 5 # とりあえずきめうち rsa_crypt(r, q) gcd, lcm = r.gcdlcm(q) printf("送信したい文字を入力して下さい (1 .. %d)\n", r * q - 1) string = "10 9 2 18" # とりあえずきめうち printf("平文: \t %s\n", string) data = string.split(' ') encrypt = [] data.each{|no| encrypt << (no.to_i) ** s % (r * q) } printf("暗号文: \t %s\n", encrypt.join(' '))