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

我只想确认我对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或仅二进制(无编码)

    • 是将所有内容从最终的二进制格式一起编码为文本格式,还是将各个组件分别编码并连接在一起?

  • 格式:

    • 在哪里放置静脉输液/即冲/盐(如果有的话)?(通常在实际密文之前)
    • 验证标签放在哪里(如果有)?(通常在实际密文之后)
    • 是加密消息语法适用?

以上是 使用C#进行AES加密和Java中的解密 的全部内容, 来源链接: utcz.com/qa/432310.html

回到顶部