c# - Objective-C 中的字符串加密在 C# 中解密
<p><p>我正在构建一个使用 c# 网络服务的 iPhone 应用程序。我的 iPhone 应用程序接收一些数据并对其进行加密并将其传递给网络服务。如何在 C# 中解密数据?</p>
<p>我的 iPhone 应用程序包含以下代码:</p>
<pre><code>NSString *pString = @"Some string to be encoded";
NSString *key = @"My encryption key";
NSData *pData = ;
pData = ;
NSString *pID = ;
</code></pre>
<p>编辑:数据已经存储在网络服务中,所以我不能轻易改变加密方法。 C# 应用程序不在服务器上,因此不可能泄露 key 。</p>
<p>我尝试了以下 C# 代码来解密数据:</p>
<pre><code> static string DecryptString(string encryptedText, string key)
{
byte[] encryptedString = Convert.FromBase64String(encryptedText);
byte[] encryptionKey = Encoding.UTF8.GetBytes(key.Substring(0, 32));
using (var provider = new AesCryptoServiceProvider())
{
provider.Mode = CipherMode.CBC;
provider.Padding = PaddingMode.PKCS7;
provider.Key = encryptionKey;
using (var ms = new MemoryStream(encryptedString))
{
// Read the first 16 bytes which is the IV.
byte[] iv = new byte;
ms.Read(iv, 0, 16);
provider.IV = iv;
using (var decryptor = provider.CreateDecryptor())
{
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
using (var sr = new StreamReader(cs))
{
return sr.ReadToEnd();
}
}
}
}
}
}
</code></pre>
<p>但是,我得到以下异常:</p>
<blockquote>
<p>System.Security.Cryptography.CryptographicException was unhandled<br/>
HResult=-2146233296 Message=Padding is invalid and cannot be
removed.</p>
</blockquote>
<p>DecryptString接收到的加密文本长度为80字节。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>示例 ObjC 代码默认使用 CBC 调制解调器、PKCS#7 填充和 16 个 <code>0x00</code> 字节的默认 iv。</p>
<p>C# 还使用 CBC 模式和 PKCS#7 填充。解密代码需要一个 16 字节的 iv 预先附加到加密数据,但它不存在。</p>
<pre><code>byte[] iv = new byte;
ms.Read(iv, 0, 16);
provider.IV = iv;
</code></pre>
<p>这需要更改,以便 <code>iv</code> 设置为 16 个 <code>0x00</code> 字节的数组,并且 <code>ms.Read(iv, 0, 16)</code> 语句需要删除,以便解密函数获得所有加密数据。</p>
<p>注意事项:</p>
<ol>
<li><p>在加密中使用 default 任何东西都是一个坏主意,始终提供正确长度的数据。</p></li>
<li><p>需要增加对加密数据的鉴权,以判断 key 是否错误或数据是否被篡改。</p></li>
<li><p>确实应该使用一个版本号和一个随机 IV,并将其添加到加密的前面,因此您真的应该考虑更正它。这说明了为什么通常需要提供和使用版本号。</p></li>
</ol>
<p>RNCryptor 涵盖了上述问题。</p>
<p>还需要考虑加密 key 的处理,以便尽可能安全。</p></p>
<p style="font-size: 20px;">关于c# - Objective-C 中的字符串加密在 C# 中解密,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/34259933/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/34259933/
</a>
</p>
页:
[1]