我在尝试围绕mcrypt_cbc打包头时遇到了一些麻烦。我有一个40字符的密钥(OAuth密钥 - 手动执行加密/签名,而不是使用OAuth库)来使用,但我不知道应该如何使用它。
最终结果需要是一个加密到SHA256 CBC的json对,以及用base64编码的结果。我拥有的是..
$key = '123456789012345678901234567890123456789012345678901234567890';
$pair = 'user:pass';
$encrypted = base64_encode(mcrypt_cbc(MCRYPT_RIJNDAEL_128,$key,$pair,MCRYPT_ENCRYPT,""));我相信这是不对的,但我有以下问题:
如果我正确地阅读了PHP文档,RIJNDAEL_128可以用于SHA256 - 这是正确的吗?
对于Key和IV ..我也看到了以下内容:
$encrypted = base64_encode(mcrypt_cbc(MCRYPT_RIJNDAEL_128,substr($key,0,32),$pair,MCRYPT_ENCRYPT,substr($key,32,16)));我有点困惑 - 头32个字符用于键,其余16个用于IV? IV总是只是关键的一部分?而这将如何完成40个角色?使用IV ...
substr($key,32,8)结果是
The IV parameter must be as long as the blocksize下面的Ruby代码是我参考的API的一个例子,但是对于Ruby我没有什么知识
def encrypt_aes(data)
sha_key = Digest::SHA2.digest(@secret_key)
aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
aes.encrypt
aes.key = sha_key
aes.iv = "\x00" * 16
encrypted = aes.update(data) + aes.final
Base64.encode64(encrypted)
end任何指导都将不胜感激。我当时在PHP方面相当有经验,但密码学一直是我最薄弱的领域。我拥有的最丰富的经验是使用C++中的Botan库,而这一切都要归功于修改各种片段。