使用C#进行AES加密并使用Java进行解密

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

如果公司#1正在加密数据,并将此数据发送到公司#2进行解密,那么假设其中一个使用C#和另一个Java.

只要两者都使用相同的共享密钥,是否还有其他任何设置/配置双方都应该同意确保数据正确加密和解​​密?

解决方法:

有很多都必须达成一致:

>共享密钥

>多久了? (需要密钥填充吗?)
>实际密钥是从另一个密钥或密码派生而来的吗?

>使用哪个密钥派生函数以及它们的参数是什么? PBKDF2,bcrypt,scrypt,……
> IV是否与密钥一起派生? (通常通过从密钥派生函数请求密钥大小IV大小输出)

>密码特征:

>分组密码,如AES,Triple DES,Twofish,Rijndael,……

>密码参数,例如块大小,以防它是可变的

> CBC,CTR,CFB等运作模式……

>对于基于IV的模式:如何生成IV?它是随机生成并放入容器格式还是与密码中的密钥一起派生,因此不需要放入密文容器中?
>对于基于随机数的模式,如CTR:nonce有多大(有时称为IV)?
>对于像CFB这样的参数化模式:一个段有多大?

>填充模式,如PKCS#7填充(也称为PKCS#5填充),ZeroPadding,…

>身份验证(如果有):

>作为操作模式,如GCM,EAX,SIV,……
>作为单独的加密 – 然后 – MAC / MAC-然后 – 加密/加密 – 和MAC方案与MAC,如HMAC-SHA256,CMAC,HKDF,GHASH,……

>每个组件的编码,如Hex,Base32,Base64或简单二进制(无编码)

>所有内容是否都是从完成的二进制格式编码为文本格式,还是单独编码并连接在一起的组件?

>格式:

>在哪里放IV / nonce / salt(如果有的话)? (通常在实际密文之前)
>在哪里放置认证标签(如果有的话)? (通常在实际的密文之后)
> Cryptographic Message Syntax适用吗?

上一篇:Application Compatibility Toolkit 5.5 在 Windows Vista / 7 相容性测试


下一篇:我可以从不是由nvcc编译的C代码调用CUDA运行时函数吗?