我使用以下函数创建对称密钥。此代码在Windows 10 UWP应用程序和带有profile7的可移植库中使用。
public bool Initialize( string securityKey ) {
byte[] saltBytes = new byte[256];
byte[] codeBytes = Encoding.UTF8.GetBytes( securityKey );
for ( int i = 0; i < 256; i++ ) {
saltBytes[i] = codeBytes[i % codeBytes.Length];
}
IBuffer bufferSalt = CryptographicBuffer.CreateFromByteArray( saltBytes );
_symmetricProvider = SymmetricKeyAlgorithmProvider.OpenAlgorithm( SymmetricAlgorithmNames.AesCbcPkcs7 );
_serverSessionKey = _symmetricProvider.CreateSymmetricKey( bufferSalt );
int key = _serverSessionKey.GetHashCode();
return true;
}
我面临的问题是,如果我直接从应用程序或使用便携式库的应用程序运行代码,则密钥哈希是不同的。当然,便携式库中的加密数据不会在应用程序中解密。
我不需要一个非常强大的机制来生成密钥,只是一种在Windows和Android上创建相同密钥的方法(这就是我使用便携版本的原因)来自共享字符串。
我已经在Windows.Security.Cryptography命名空间中使用了可用的密钥派生函数但仍然遇到了同样的问题:来自同一种子的生成密钥具有相同的生成参数在不同平台上是不同的。上面的代码只是为了验证CreateSymmetricKey是否生成相同的密钥,如果提供相同的数据,这似乎不是这种情况,所以我试图找出什么是错的,或者是否有其他机制我可以用来获得相同的结果< / p>
有什么建议吗?