Tag: aes

如何使用AES 256 ECB PKCS5Padding在ruby中加密数据

我希望用AES 256bit ECB模式加密数据使用PKCS5padding我的ruby方法如下,如何在这里使用PKCS5Padding def encrypt(raw_data,key) cipher = OpenSSL::Cipher::AES.new(256, :ECB) cipher.encrypt cipher.key = key encrypted_data = cipher.update(raw_data) + cipher.final end 这里的密钥是OpenSSL :: PKey :: RSA类型, no implicit conversion of OpenSSL::PKey::RSA into String抛出no implicit conversion of OpenSSL::PKey::RSA into Stringexception的no implicit conversion of OpenSSL::PKey::RSA into String

在Ruby / Python中使用哪个AES库?

我需要能够在Ruby客户端和Python服务器之间发送加密数据(反之亦然),并且在使用ruby-aes gem /库时遇到了问题。 该库非常易于使用,但我们在它与Python的pyCrypto AES库之间传递数据时遇到了麻烦。 当它们是唯一使用的库时,这些库看起来很好,但它们似乎在语言边界上不能很好地发挥作用。 有任何想法吗? 编辑:我们正在通过SOAP进行通信,并尝试将二进制数据转换为base64无济于事。 此外,更多的是加密/解密在两者之间几乎但不完全相同(例如,长度相差一个或在解密字符串的末尾有额外的垃圾字符)

如何将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 […]

Ruby中的Rijndael AES-128加密解密

我想在ruby中使用rijndael aes128进行加密。 我有这个代码: cipher = OpenSSL::Cipher::Cipher.new(“aes-128-cbc”) cipher.encrypt cipher.key = ‘abcdef0123456789abcdef0123456789’ cipher.iv = ‘0000000000000000’ encrypted = cipher.update(‘2~1~000024~0910~20130723092446~T~00002000~USD~F~375019001012120~0~0~00000000000~’) encrypted << cipher.final 这是行不通的。 但是使用这个PHP函数: <?php function hex2bin($hex_string) { return pack('H*', $hex_string); } $data_to_encrypt = '2~1~000024~0910~20130723092446~T~00002000~USD~F~375019001012120~0~0~00000000000~'; $key = 'abcdef0123456789abcdef0123456789'; $iv = '0000000000000000'; $key = hex2bin($key); $iv = hex2bin($iv); $data_encrypted = bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data_to_encrypt, MCRYPT_MODE_CBC, $iv)); echo "Data encrypted: ".strtoupper($data_encrypted)."”; […]

使用AES-128-CBC编码/解码的问题

所以基本上我有这些代码片段,并希望它们产生相同的输出: require ‘openssl’ aes = OpenSSL::Cipher::Cipher.new(“AES-128-CBC”) aes.key = “aaaaaaaaaaaaaaaa” aes.iv = “aaaaaaaaaaaaaaaa” aes.encrypt encrypted = aes.update(“1234567890123456”) << aes.final puts encrypted.unpack('H*').join 这打印: 8d3bbffade308f8e4e80cb77ecb8df19ee933f75438cec1315c4a491bd1b83f4 而这个Java代码: Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); String key = “aaaaaaaaaaaaaaaa”; String textToEncryptpt = “1234567890123456”; SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), “AES”); IvParameterSpec ivspec = new IvParameterSpec(key.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(textToEncryptpt.getBytes()); System.out.println(Crypto.bytesToHex(encrypted)); 打印: […]

AES Python加密和Ruby加密 – 不同的行为?

从这个网站我有这个代码片段: >>> from Crypto.Cipher import AES >>> obj = AES.new(‘This is a key123’, AES.MODE_CBC, ‘This is an IV456’) >>> message = “The answer is no” >>> ciphertext = obj.encrypt(message) >>> list(bytearray(ciphertext)) [214, 131, 141, 100, 33, 86, 84, 146, 170, 96, 65, 5, 224, 155, 139, 241] 当我接受这个数组并将其转换为Ruby中的String并继续解密时,会发生错误: >> require ‘openssl’ => true >> obj2 […]

使用任何东西在Ruby中的Objective-C / Decrypt中加密

我们使用此代码在iPhone上的Objective-C中进行加密: – (NSMutableData*) EncryptAES: (NSString *) key { char keyPtr[kCCKeySizeAES128+1]; bzero( keyPtr, sizeof(keyPtr) ); [key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF8StringEncoding]; size_t numBytesEncrypted = 0; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); NSMutableData *output = [[NSData alloc] init]; CCCryptorStatus result = CCCrypt( kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, […]

在ruby中使用sjcl.js创建的AES解密

嗨,假设客户端有一个密钥不通过与加密数据相同的通道传输。 我想要完成的是在ruby中解密Stanford Javascript Crypto Library(sjcl)的结果。 或者用于具有支持AES的加密库的任何其他语言的泛化。 这是我在javascript中所做的事情: sjcl.encrypt(‘stack-password’, ‘overflow-secret’) 这就是我得到的回报: { “iv”: “Tbn0mZxQcroWnq4g/Pm+Gg”, “v”: 1, “iter”: 1000, “ks”: 128, “ts”: 64, “mode”: “ccm”, “adata”: “”, “cipher”: “aes”, “salt”: “pMQh7m9Scds”, “ct”: “H6JRpgSdEzKUw2qEO1+HwIzAdxGTgh0” } 所以我实际要问的是,我需要哪些参数(假设服务器已经有“stack-password”密钥)才能解密秘密服务器端,我应该使用哪个库? 可能有AES解密库是不够的?

第二部分:如何使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中的Rijndael(用VB.net编码)

我正在使用Rinjael在VB.NET中进行编码,需要在Ruby中进行解码。 我的VB.NET加密类看起来像这样: Private Class Encryptor Private symmetricKey As System.Security.Cryptography.RijndaelManaged Private iVector As Byte() Private Key As Byte() Public Function encrypt(ByVal data As String) As String Try Dim plainTextBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(data) Dim encryptor As System.Security.Cryptography.ICryptoTransform = symmetricKey.CreateEncryptor(Key, iVector) Dim memoryStream As New System.IO.MemoryStream Dim cryptoStream As System.Security.Cryptography.CryptoStream = New System.Security.Cryptography.CryptoStream(memoryStream, encryptor, System.Security.Cryptography.CryptoStreamMode.Write) cryptoStream.Write(plainTextBytes, 0, […]