使用Ruby从Mongodb读取二进制数据
我有一个MEAN.JS应用程序,它使用下面这段代码将二进制数据写入一个Mongodb(db版本v2.6.5):
UserSchema.pre('save', function(next) { if (this.password) { this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64'); this.password = this.hashPassword(this.password); } next(); })
尝试从ruby(v 2.1.5与mongo v1.11.1)读取这个二进制数据我有一个base64解码错误:
2.1.5 :001 > Base64.strict_decode64(salt) `unpack': invalid base64 (ArgumentError)
试图在二进制模式下解压salt会导致错误的数据:
[239, 191, 189, 239, 191, 189, 90, 239, 191, 189, 46, 120, 8, 239, 191, 189, 45, 239, 191, 189, 20, 221, 150, 239, 191, 189, 239, 191, 189, 57]
30个字符,而不是原来的16个
似乎mongo gem以UTF-8string的forms读取二进制数据并将其破坏
我怎样才能恢复从mongodb存储的缓冲区中的原始string?
crypto.randomBytes(16).toString('base64')