在 PHP 中加密,在 C# (WP7 / Silverlight) 中使用 AES / Rijndael 解密

2024-03-01

我在我的 Android 应用程序中使用了用 PHP 编写的 REST 服务,没有遇到太多麻烦。现在我尝试在 Windows Phone 应用程序中使用它,我已经快疯了!

到目前为止我所知道的:Silverlight 将仅接受 CBC 模式下的 Aes 和 PKCS7 填充。 http://msdn.microsoft.com/en-us/library/bb352553%28v=vs.95%29

我得到的结果:“填充无效且无法删除”异常(请参阅底部的完整代码):

plaintext = srDecrypt.ReadToEnd();

如果我在 C# 中使用相同的配置进行加密和解密,则效果很好。当我尝试在 C# 中从 PHP 加密字符串进行解密时,它失败并出现上述错误。

我的 PHP 脚本执行以下操作:

function encrypt128($message) {
    $vector = "DB96A56CCA7A69FC";
    $key = "6DBC44F54CA3CFDEDDCA140CA46A99C1"; // PHP md5 function leaves it in lower case, so I just copied the key from C# debug.

    //PKCS7 Padding
    $block = mcrypt_get_block_size('rijndael_128', 'cbc');
    $pad = $block - (strlen($message) % $block);
    $message.= str_repeat(chr($pad), $pad);

    $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 'cbc', '');
    mcrypt_generic_init($cipher, $key, $vector);
    $result = mcrypt_generic($cipher, $message);
    mcrypt_generic_deinit($cipher);

    return base64_encode($result);
}

在 C#(Silverlight / Windows Phone 7)中,我使用以下命令进行解密:

//Where buffer is the string data I got after calling the PHP REST service.
DecryptStringFromBytes(Convert.FromBase64String(buffer), MD5Core.GetHash("7a272d3e41372c547a272d3e41372c54"), System.Text.Encoding.UTF8.GetBytes("DB96A56CCA7A69FC"));

static string DecryptStringFromBytes(byte[] cipherText, byte[] Key, byte[] IV)
{
    // Check arguments.
    if (cipherText == null || cipherText.Length <= 0)
        throw new ArgumentNullException("cipherText");
    if (Key == null || Key.Length <= 0)
        throw new ArgumentNullException("Key");
    if (IV == null || IV.Length <= 0)
        throw new ArgumentNullException("Key");

    // Declare the string used to hold
    // the decrypted text.
    string plaintext = null;

    // Create an RijndaelManaged object
    // with the specified key and IV.
    using (AesManaged rijAlg = new AesManaged())
    {
        rijAlg.Key = Key;
        rijAlg.IV = IV;

        // Create a decrytor to perform the stream transform.
        ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);

        // Create the streams used for decryption.
        using (MemoryStream msDecrypt = new MemoryStream(cipherText))
        {
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                {

                    // Read the decrypted bytes from the decrypting stream
                    // and place them in a string.
                    plaintext = srDecrypt.ReadToEnd();
                }
            }
        }
    }
    return plaintext;
}

最大的问题是:我做错了什么?

提前致谢!


所以这是答案:

我从 PHP 和 C# 中删除了 MD5 垃圾,它们现在可以正常工作了。

以防万一您来到这里寻找相同的答案,这里有一个示例代码。不要忘记制作自己的密钥和 iv(尽管下面的这些可以使用,但不建议使用!)

PHP:

function encrypt128($message) {
    $vector = "0000000000000000";
    $key = "00000000000000000000000000000000";

    $block = mcrypt_get_block_size('rijndael_128', 'cbc');
    $pad = $block - (strlen($message) % $block);
    $message .= str_repeat(chr($pad), $pad);

    $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 'cbc', '');
    mcrypt_generic_init($cipher, $key, $vector);
    $result = mcrypt_generic($cipher, $message);
    mcrypt_generic_deinit($cipher);

    return base64_encode($result);
}

C#:

byte[] cripted = EncryptStringToBytes("Test", System.Text.Encoding.UTF8.GetBytes("00000000000000000000000000000000"), System.Text.Encoding.UTF8.GetBytes("0000000000000000"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中加密,在 C# (WP7 / Silverlight) 中使用 AES / Rijndael 解密 的相关文章

  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • laravel 5.4 在请求验证之前修改数据[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有我的自定义请求 它扩展了 Backpack CrudController 现在我想重写 ValidatesWhenResolv
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 隐藏产品价格和添加到购物车按钮,但不隐藏 WooCommerce 中未注册用户的变体

    在我的 WooCommerce 商店中 我想隐藏价格 直到客户登录为止 我有以下代码可以实现这一点 add action init hide price function hide price if is user logged in re
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 与 array_intersect 相反?

    是否有一个内置函数可以获取数组 1 中不存在于数组 2 中的所有成员 我知道如何以编程方式执行此操作 只是想知道是否有一个内置函数可以执行相同的操作 所以请不要提供代码示例 这听起来像是一份工作array diff http www php
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • PHP简单的html dom解析器与wordpress冲突吗?

    PHP简单的html dom解析器与wordpress冲突吗 因为每当我尝试将其与此代码一起包含在我的标头中时 一切都变成空白 感谢您提前提供任何帮助 当我尝试在 HTML 文档中使用 PHP 包含时 我遇到了同样的问题 但当我使用func
  • 禁用/启用用户访问/下载,但允许 php 编辑 - 使用 chown 和 chmod

    我想 move uploaded files到某个文件夹 比方说http localhost myproject protected 并且 PHP 应该能够rm mv cp 里面的一切protected 例如 启用 禁用用户对任何文件的访问
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp

随机推荐

  • 使用 SSL 和客户端证书身份验证保护 ASP.NET MVC 应用程序

    我希望通过 SSL 和客户端证书身份验证来保护 ASP NET MVC 应用程序的安全 我使用的是 IIS 7 5 Windows Server 2008 R2 我想知道是否可以通过 Web config 执行以下操作 必须通过那里 所有请
  • 如何创建链接标签云[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要生成一个文本链接云 类似于所附的图像 由于有些文字是垂直的 我正在考虑通过 CSS3 来实现 但这会消耗大量时间 你知道有什么网
  • 使用 OpenCV 打开并读取 avi 文件 - Ubuntu

    我刚刚在 R Laganiere 的 OpenCV 2 计算机视觉应用编程手册 一书中读到了这一点 需要注意的是 为了打开指定的视频 文件 您的计算机必须安装相应的编解码器 否则 cv VideoCapture 将无法理解输入 文件 通常
  • 如何使用 angular_devise 保留全局当前用户直到注销?

    如何创建自己的全局可访问的服务 该服务将通过以下方式调用服务器currentUser 仅在页面加载时一次 如果用户已登录 则保留它并向控制器或状态提供数据 直到注销 现在我在许多状态或控制器中多次解析currentUser 我在文档中找到
  • 如何检测用户何时使用模拟位置 Chrome 浏览器[重复]

    这个问题在这里已经有答案了 有没有办法检测用户何时在 Chrome 浏览器 移动和桌面 中模拟他的位置 尝试过谷歌搜索 但我只看到如何实际模拟以及如何在本机移动应用程序中检测 参考这个问题 https stackoverflow com q
  • Execvp 不会对未知命令返回错误

    我有以下代码 用于分叉子级并执行命令 a 这是一个未知命令 但是 execvp 不会返回错误 而是打印 成功 当文件 a 不存在时 如果我执行 mv a b 也会发生同样的事情 我应该如何捕获并处理这些错误 int main int arg
  • java.lang.ClassCastException:android.app.ContextImpl

    我正在尝试将 ScoreNinja 融入我的小游戏中 http scoreninja appspot com http scoreninja appspot com 但是 每次都会抛出运行时异常 05 24 23 22 59 888 ERR
  • Angularjs 1.X 相当于 Angular 2 HostBinding 和 HostListener

    我目前正在将一些 ng 1 X 元素指令迁移到 1 5 组件 格式 我的指令都处于 replace true 模式 其中很多指令的根元素上都有诸如 ng class 或 ng click 之类的内容 使用新的 component 格式 re
  • 如何在不依赖 JAX-RS 实现的情况下捕获 404 (NotFoundException)?

    通常一个用途ExceptionMapper捕获异常 记录它们 返回自定义的错误消息 然而 虽然 JAX RS 提供了NotFoundException在其 api 中 实现 Jeresy CXF 提供了自己的 NotFoundExcepti
  • 为开发环境分配域名localhost

    我正在构建一个网站 并且不想将网站从指向重新配置为http 127 0 0 1 to http www example com 此外 我使用的证书当然是用正确的域名制作的www example com但我的测试环境会调用127 0 0 1这
  • Apple Web Clip(Apple Touch 图标)不适用于采用 HTTPS 的网站

    当我为网站启用 HTTPS 时 我很难在 Safari 中的 添加书签 功能中显示 Apple Touch 图标 我可以使用 添加到主页 选项来使其工作 所以我不确定是否对 添加书签 进行了不同的调用 我已经按照苹果文档 https dev
  • 无法在应用程序中使用表情符号:拒绝提交到AppStore

    有谁知道是否所有表情符号都是苹果公司的财产 我试图在我的应用程序中使用其中的很多 大约 80 个 作为文本 但应用程序被拒绝 我问是否有一个我不能使用的表情符号列表 但没有得到答案 如果你已经被 AppStore 提交过程拒绝 你就会知道它
  • 如何优化画布上的动画? HTML 5

    我面临着一个问题 随着各种图片向左 向右 向上和向下移动 画布上的动画速度会减慢 我需要有关如何优化动画的建议 重要的是动画适用于所有主要浏览器 特别是 Chrome Firefox 和 Internet Explorer 动画可以优化吗
  • 如果存在依赖,编译器能否正确处理静态变量的初始化顺序?

    如果存在依赖 编译器能否正确处理静态变量的初始化顺序 例如 我有 a h struct A static double a a cpp include a h double A a 1 b h struct B static double
  • 从 DocumentDb 中删除特定文档

    以下代码检索具有特定 jobId 的所有 CrawlResult 文档 var result from c in documentDb CreateDocumentQuery
  • 特定域的 htaccess 标头?

    我有三个环境 env com env uat com env pre com 所有三个页面都运行相同的代码 我希望 env uat com 和 env pre com 都在 htaccess 中获取此内容 Header set X Robo
  • 角度隐藏忽略

    我试图在 Angular2 中使用隐藏属性 当我包含改变 DIV 显示的样式时 隐藏属性将被忽略 当运行下面的代码时 两个 div 都会显示 当我删除 displayInline 类时 第一个 DIV 被隐藏 第二个 DIV 被显示 如预期
  • TF400324:在 Visual Studio 2012 中,Team Foundation 服务无法从服务器 获得

    当我在 Visual Studio 2012 Professional 中打开现有解决方案时 出现上述错误 这曾经有效 但在重建计算机后出现了一些问题 我已经安装了 Visual Studio 2015 Community 并且可以连接到相
  • 使用反向 Y 轴计算 2 点之间的度数

    我正在使用 javascript canvas 创建一个简单的 2D 游戏 我需要计算出某个物体相对于我的位置的角度 所以 假设我在 10 10 并且物体在 10 5 这将导致 90 度 因为正 Y 向下 负 Y 向上 10 10 与 10
  • 在 PHP 中加密,在 C# (WP7 / Silverlight) 中使用 AES / Rijndael 解密

    我在我的 Android 应用程序中使用了用 PHP 编写的 REST 服务 没有遇到太多麻烦 现在我尝试在 Windows Phone 应用程序中使用它 我已经快疯了 到目前为止我所知道的 Silverlight 将仅接受 CBC 模式下