当前位置: 首页 > 面试题库 >

使用C#进行AES加密和Java中的解密

卢知
2023-03-14
问题内容

我只想确认我对AES如何工作的理解。

如果company#1正在加密数据,并将此数据发送到company#2进行解密,则假定其中一个使用C#,另一个使用Java。

只要双方都使用相同的共享密钥,双方是否应该在设置/配置方面达成共识,以确保数据正确地加密和解密?


问题答案:

两者都有很多共识:

  • 共享密钥
    • 多久了?(是否需要填充键盘?)
    • 实际的密钥是从另一个密钥或密码派生而来的吗?
    • 使用了哪个密钥推导函数,它们的参数是什么?PBKDF2,bcrypt,scrypt,…
    • IV与密钥一起导出吗?(通常通过请求密钥派生函数的密钥大小+ IV大小输出)
  • 密码特征:
    • 分组密码,例如AES,Triple DES,Twofish,Rijndael,…
    • 密码参数,例如块大小(如果它是可变的)
    • CBC,CTR,CFB等操作模式…
    • 对于基于IV的模式:IV是如何生成的?它是随机生成并放入容器格式,还是与密码一起从密钥派生而出,因此不需要放入密文容器中?
    • 针对基于随机数的模式(例如CTR):随机数多大(有时称为IV)?
    • 对于CFB等参数化模式:段有多大?
    • 填充模式,例如PKCS#7填充(也称为PKCS#5填充),ZeroPadding,…
  • 身份验证(如果有):
    • 作为GCM,EAX,SIV等操作模式
    • 作为单独的加密-然后-MAC / MAC-然后-加密/加密-和MAC方案,如HMAC-SHA256,CMAC,HKDF,GHASH,…
  • 每个组件的编码,例如十六进制,Base32,Base64或仅二进制(无编码)
    • 是将所有内容从最终的二进制格式一起编码为文本格式,还是将各个组件分别编码并连接在一起?
  • 格式:
    • 在哪里放置静脉输液/即冲/盐(如果有的话)?(通常在实际密文之前)
    • 验证标签放在哪里(如果有)?(通常在实际密文之后)
    • 是加密消息语法适用?


 类似资料:
  • 问题内容: 这是我正在做的事情,可能看起来有些笨拙,但是可以帮助您解决该问题。我得到一个。阅读几乎所有相关主题,但找不到合适的解决方案。我是加密解密程序设计的新手,需要在我的Java应用程序之一中实现它。 谢谢..这就是代码的样子.... 问题答案: 在这里,您需要了解的是密文可能包含不可打印的字符。因此,当您使用readLine()时,它可能不会为您提供文件中的所有字节。 同样,它并没有给您您认

  • 问题内容: 我必须使用openssl命令行或C api加密xml文件。输出应为Base64。 一个Java程序将用于解密。该程序由客户提供,不能更改(他们正在将这些代码用于旧版应用程序)。正如您在下面的代码中看到的那样,客户提供了一个密码短语,因此将使用SecretKeySpec方法生成密钥。 Java代码: 我已经测试了几个命令,例如: 但是,使用Java无法成功解密给定的输出。为了进行测试,我

  • 我正在尝试将我的应用程序从128位AES密钥升级为256位AES。然而,当我将第54行从128更改为256时,我会得到以下密钥大小错误。 java.security.无效密钥异常: 非法的密钥大小 我已正确安装了JCE文件,我的应用程序生成较长的密钥这一事实证明了这一点。 我在其他文章中看到过“AES / CBC / PKCS7Padding”加密方法,但这只会让我遇到这个例外:

  • 问题内容: 有没有一个很好的示例,说明如何在Android上使用AES 加密和解密图像及其他文件? 问题答案: 并像这样调用它们: 这应该可行,我现在在项目中使用类似的代码。

  • 我只想用这3种模式测试openSSL中的AES:128192和256密钥长度,但我解密的文本与我的输入不同,我不知道为什么。此外,当我传递一个巨大的输入长度(比如1024字节)时,我的程序显示。。。我的意见总是一样的,但这并不重要,至少现在是这样。代码如下: 编辑: 当我将输出大小更改为而不是时,我得到了结果: 那么,是否有可能存在Outpus大小和IV大小的问题?它们应该有什么尺寸(AES-CB

  • 最近,我终于(在stackoverflow的用户@WhozCraig的帮助下)开始在CBC模式下使用AES。现在,我想用AES IGE做同样的事情。我看了并尝试构建自己的测试。但是,我再次遇到了输入和输出大小合适的问题。其他一切都很好,因为我从以前的代码中复制了它:AES(aes-cbc-128、aes-cbc-192、aes-cbc-256)使用openssl C进行加密/解密。 现在,当我传递