我正在尝试加密来自 glide 的输入流。
我将输入流转换为一个字节数组,并将其传递到我的加密方法中:
fun encrypt(input: ByteArray): ByteArray {
Log.e("TAG", "inputsize: ${input.size}")
val iv = ByteArray(KeyStoreHelper.IV_SIZE)
val secureRandom = SecureRandom()
secureRandom.nextBytes(iv)
val c = Cipher.getInstance(KeyStoreHelper.AES_MODE)
c.init(Cipher.ENCRYPT_MODE, getKey(), GCMParameterSpec(KeyStoreHelper.GCM_SIZE, iv))
Log.e("TAG", "outputsize: ${c.getOutputSize(input.size)}")
val encodedBytes = c.doFinal(input)
Log.e("TAG", "encodedBytesSize: ${encodedBytes.size}")
val byteBuffer = ByteBuffer.allocate( iv.size + encodedBytes.size)
byteBuffer.put(iv)
byteBuffer.put(encodedBytes)
Log.e("TAG", "byteBuffer: ${byteBuffer.array().size}")
return byteBuffer.array()
}
日志如下所示:
inputsize: 750683
outputsize: 750699
encodedBytesSize: 95339
byteBuffer: 95351
如您所见,加密的图像字节数组太小了,我不明白为什么 - 如果我尝试加密字符串或更小的图像(大约 100kb-200kb),它就像一个魅力。
谢谢你帮助我!
亲切的问候 汤姆
最佳答案
看起来你遇到了一个错误,奇怪的是在一个不合逻辑的位置:95339 是一个质数。您几乎会认为某些开发人员故意留下该值,以防他忘记或测试测试团队。
但是,对于如此大量的信息,将所有数据都缓存在内存中并不是一个好主意,即使对于 GCM 也是如此。您应该尝试改用流媒体。您可以使用 CipherOutputStream 执行加密,使用 CipherInputStream 进行解密。您可以将这些流连接到其他流,例如 FileOutputStream 和 FileInputStream 以直接读取/写入文件系统。也可以将 IV 写入这些底层流。
请注意,不同提供商处理 GCM 的方式可能存在很大差异。正如您所注意到的,与 Android keystore 关联的那个是为安全而构建的 - 无论如何是 key - 而不是速度。 GCM 的其他实现可能不会显示此错误。请注意,可用的提供程序可能因不同的 Java(-esk) 平台和这些平台的版本而异。
关于Android AES 加密在 Cipher.doFinal 之后丢失字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944627/
我正在使用Ruby,我正在与一个网络端点通信,该端点在发送消息本身之前需要格式化“header”。header中的第一个字段必须是消息长度,它被定义为网络字节顺序中的2二进制字节消息长度。比如我的消息长度是1024。如何将1024表示为二进制双字节? 最佳答案 Ruby(以及Perl和Python等)中字节整理的标准工具是pack和unpack。ruby的packisinArray.您的长度应该是两个字节长,并且按网络字节顺序排列,这听起来像是n格式说明符的工作:n|Integer|16-bitunsigned,network(bi
我在加密来self正在使用的第三方供应商的值时遇到问题。他们的指令如下:1)Converttheencryptionpasswordtoabytearray.2)Convertthevaluetobeencryptedtoabytearray.3)Theentirelengthofthearrayisinsertedasthefirstfourbytesontothefrontofthefirstblockoftheresultantbytearraybeforeencryption.4)EncryptthevalueusingAESwith:1.256-bitkeysize,2.25
首先,关于我们系统的一些信息,它基本上是建筑行业的电子招标解决方案。所以:列表项我们的系统有多家公司每个公司都有多个用户每家公司可以创建多个拍卖然后其他公司可以为可用的拍卖提交他们的出价。一个出价包含数百或数千个单独的项目,我们只需要加密这些记录的“价格”部分。我们面临的问题是,我们的大客户不希望我们知道投标价格,至少在投标过程中是这样,这是完全可以理解的。现在,我们只是通过对称加密对价格进行加密,因此即使价格在数据库中有效加密,他们担心的是我们拥有解密价格的key。因此,我们正在研究某种形式的公钥加密系统。以下是我们对解决方案的初步想法:当一家公司注册时,我们会使用OpenSSL为其
我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我正在创建一个Sinatra应用程序,它采用上传的CSV文件并将其内容放入哈希中。当我像这样在我的app.rb中引用这个散列时:hash=extract_values(path_to_filename)我不断收到此错误消息:undefinedmethod`bytesize'forHash:0x007fc5e28f2b90#object_idfile:utils.rblocation:bytesiz
安装Rails时,一切都很好,但后来,我写道:rails-v和输出:/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`require':cannotloadsuchfile--rails/cli(LoadError)from/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`r
我正在尝试将RubyDate对象转换为字符串。日期格式为:Sun,15Sep2013但是,当我使用#to_s将其转换为字符串时,它会给出以下内容:"2013-09-15"相反,我希望它变成:"Sun,15Sep2013" 最佳答案 使用Date#strftime有很多选择require'date'date=Date.parse("Sun,15Sep2013")#=>#date.strftime("%a,%d%b%Y")#=>"Sun,15Sep2013" 关于ruby-将ruby日期
我在Rails中有一个具有以下方法的应用程序,该方法可以加密和解密文本并与Java客户端通信。defencrypt(string,key)cipher=OpenSSL::Cipher::AES.new(128,:CBC)cipher.encryptcipher.padding=1cipher.key=hex_to_bin(Digest::SHA1.hexdigest(key)[0..32])cipher_text=cipher.update(string)cipher_textexcenddefhex_to_bin(str)[str].pack"H*"enddefbin_to_hex(
我觉得自己像个十足的白痴,但我整天都在研究这个,却一无所获。我重新启动了几次,试图在我的OSX环境、RVM、Brew、Ruby上完全安装Ruby:每次我完成Ruby安装时,它都会在rubygems安装上触底。我不得不重新开始的原因是,在我第一次成功安装(使用打包的一体式RubyInstaller)后,RVM不会在Jewellerybox中更新,所以我无法管理我的gems-这是一个问题通过在/usr/local中而不是在我自己的目录下的系统上的初始Ruby安装。为了解决这个问题,我卸载了我所有的Ruby东西并重新开始。一切正常,直到ruby编译器在安装ruby2.0.0时开始
有没有一种方法可以查看ruby中为类分配的内存大小?我构建了一个自定义类,我想知道它在内存中的大小。那么C语言中有没有类似sizeof()的函数呢?我只是想像这样初始化一个新类test=MyClass.new并试图找到一种方法来打印出已分配给内存的类的大小。这在ruby中甚至可能吗? 最佳答案 没有以与C相同的方式计算类大小的语言功能。对象的内存大小取决于实现。这取决于基类对象的实现。估计使用的内存也不简单。例如,如果字符串很短,则可以嵌入到RString结构中,但如果它们很长(NevercreateRubystringsl