Tag: mcrypt

如何将128 CFB转换为Ruby?

我需要用PHP API来交换,它会隐藏请求和答案。 在我这边我是在rails 4.0.0(ruby 2.0),我无法使它工作。 我已经阅读了很多关于这个主题的答案,并试图了解mcrypt的工作原理,例如http://www.chilkatsoft.com/p/php_aes.asp ,但没有成功。 我仍然无法解密从PHP加密或加密PHP可以解密的东西 你能帮助我,看看我做错了什么吗? PHP代码: $secretKey = “1234567891234567”; $encrypt = urlencode( base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_128, md5($secretKey), $cleartext, MCRYPT_MODE_CFB, $secretKey ) ) ); $input = urldecode($input); $decrypt = mcrypt_decrypt( MCRYPT_RIJNDAEL_128, md5($secretKey), base64_decode($input), MCRYPT_MODE_CFB, $secretKey ); Ruby代码: def self.encode(params = {}) cipher = OpenSSL::Cipher::AES.new(256, :CFB) cipher.encrypt cipher.key = Digest::MD5.hexdigest(“1234567891234567”) cipher.iv = “1234567891234567” encrypted […]

为什么在PHP中加密的东西与在Ruby中加密的相同字符串不匹配?

这是我的要求: 我需要使用AES加密(包括随机iv)在PHP中加密字符串,对其进行Base64编码,然后对其进行URL编码,以便将其作为URL参数传递。 我试图在PHP和Ruby中获得相同的结果,但我无法使其工作。 这是我的PHP代码: function encryptData($data,$iv){ $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, ”, MCRYPT_MODE_CBC, ”); $iv_size = mcrypt_enc_get_iv_size($cipher); if (mcrypt_generic_init($cipher, ‘g6zys8dlvvut6b1omxc5w15gnfad3jhb’, $iv) != -1){ $cipherText = mcrypt_generic($cipher,$data ); mcrypt_generic_deinit($cipher); return $cipherText; } else { return false; } } $data = ‘Mary had a little lamb’; $iv = ’96b88a5f0b9efb43′; $crypted_base64 = base64_encode(encryptData($data, $iv)); 这是我的Ruby代码: module AESCrypt def AESCrypt.encrypt(data, key, […]

用PHP加密(mcrypt),在Ruby中解密(OpenSSL :: Cipher)

我正在开发一个跨语言项目,用PHP包装ruby / Sinatra API,供其他团队使用。 API公开的信息都不敏感,但我们希望一个不经意的观察者无法轻易地访问这个信息。 private function generateSliceIDToken($key){ $currentEpoch = time(); $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); $encryptedBytes = mcrypt_encrypt( MCRYPT_RIJNDAEL_128, $key, $currentEpoch.**Passcode**, MCRYPT_MODE_CBC, $iv ); $ivAndEncryptedBytes = $iv . $encryptedBytes; return urlencode(urlencode(base64_encode($ivAndEncryptedBytes))); 上面的代码使用mcrypt的RIJNDAEL实现加密密码和时间戳,并对其进行编码以发送到ruby API if identifier.validate_token Base64.decode64(URI.unescape( URI.unescape(params[:token]))) Sinatra抓住它并解码它 def validate_token(token) cipher = OpenSSL::Cipher::AES.new(128, ‘CBC’) cipher.decrypt cipher.key = **key** cipher.iv = token[0,16] […]

第二部分:如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128一起发挥得很好

这个问题是我最后一个问题的延续,关于如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128很好地协同工作 。 我现在已经开始工作,但我仍然在努力朝着另一个方向努力。 PHP生成的密码似乎具有所提供的所有信息,但是我无法使用Ruby代码来解密它而不会出错。 这是我用来生成密码的PHP代码: $cleartext = “Who’s the clever boy?”; $key = base64_decode(“6sEwMG/aKdBk5Fa2rR6vVw==\n”); $iv = base64_decode(“vCkaypm5tPmtP3TF7aWrug==”); $cryptogram = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $cleartext, MCRYPT_MODE_CBC, $iv); $result = base64_encode($cryptogram); print “\n’$result’\n”; RESULT ‘JM0OxMINPTnF1vwXdI3XdKI0KlVx210CvpJllFja+GM=’ 然后这是尝试在Ruby中解密: >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-128-cbc’) >> cipher.key = Base64.decode64(“6sEwMG/aKdBk5Fa2rR6vVw==\n”) >> cipher.iv = Base64.decode64(“vCkaypm5tPmtP3TF7aWrug==”) >> cryptogram = Base64.decode64(‘JM0OxMINPTnF1vwXdI3XdKI0KlVx210CvpJllFja+GM=’) >> cleartext = cipher.update(cryptogram) => […]

如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128一起发挥得很好

我正在生成要从Ruby堆栈发送到PHP堆栈的数据。 我在Ruby端使用OpenSSL :: Cipher库,在PHP使用’mcrypt’库。 当我在Ruby中使用’aes-256-cbc’(256位块大小)进行加密时,我需要在PHP中使用MCRYPT_RIJNDAEL_128(128位块大小)来解密它。 我怀疑Ruby代码被破坏了,因为cipher.iv_len是16; 我相信它应该是32: >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-128-cbc’) => # >> cipher.key_len => 16 >> cipher.iv_len => 16 >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) => # >> cipher.key_len => 32 >> cipher.iv_len => 16 所以这是我的考试。 在Ruby方面,首先我生成密钥和iv: >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) >> cipher.encrypt >> iv = cipher.random_iv >> iv64 = [iv].pack(“m”).strip => “vCkaypm5tPmtP3TF7aWrug==” >> key […]