rijndael 加密 - 仅解密部分字符串

2023-12-01

只有部分字符串被解密,我认为这与我的编码有关。

发生的情况如下:

        string s = "The brown fox jumped over the green frog";
        string k = "urieurut";
        string enc = EncryptString(s, k);
        string dec = DecryptString(enc, k);

结果是这样的: 棕色狐狸 juϼ㴘裴혽Ή⪻ㆉr th≸ g⟤een 青蛙

public static string EncryptString(string stringToEncrypt, string encryptionKey)
{
    string encrypted = String.Empty;

    UnicodeEncoding UE = new UnicodeEncoding();
    byte[] key = UE.GetBytes(encryptionKey);

    RijndaelManaged RMCrypto = new RijndaelManaged();
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);

    byte[] encryptedString = UE.GetBytes(stringToEncrypt);
    cs.Write(encryptedString, 0, encryptedString.Length);
    cs.FlushFinalBlock();
    cs.Close();

    encrypted = UE.GetString(ms.ToArray());
    return encrypted;
}

public static string DecryptString(string stringToDecrypt, string encryptionKey)
{
    string decrypted = String.Empty;

    UnicodeEncoding UE = new UnicodeEncoding();
    byte[] key = UE.GetBytes(encryptionKey);
    byte[] data = UE.GetBytes(stringToDecrypt);

    RijndaelManaged RMCrypto = new RijndaelManaged();
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, RMCrypto.CreateDecryptor(key, key), CryptoStreamMode.Write);
    cs.Write(data, 0, data.Length);
    cs.FlushFinalBlock();
    cs.Close();

    decrypted = UE.GetString(ms.ToArray());

    return decrypted;
}

干得好:

    string s = "The brown fox jumped over the green frog";
    string k = "urieurut";
    byte[] enc = EncryptString(s, k);
    string dec = DecryptString(enc, k);

您不能尝试将加密的字节串解释为 Unicode 字符串。将它们保留为字节。解密后的版本可以转换回字符串。

另请注意以下一次性物品的处理。如果您没有正确释放某些资源,则可能会导致某些资源被保留太长时间或泄漏using() or Dispose().

public static byte[] EncryptString(string stringToEncrypt, string encryptionKey)
{
    UnicodeEncoding UE = new UnicodeEncoding();
    byte[] key = UE.GetBytes(encryptionKey);

    using (RijndaelManaged RMCrypto = new RijndaelManaged())
    using (MemoryStream ms = new MemoryStream())
    using (ICryptoTransform encryptor = RMCrypto.CreateEncryptor(key, key))
    using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
    {
        byte[] encryptedString = UE.GetBytes(stringToEncrypt);
        cs.Write(encryptedString, 0, encryptedString.Length);
        cs.FlushFinalBlock();
        return ms.ToArray();
    }
}

public static string DecryptString(byte[] stringToDecrypt, string encryptionKey)
{
    UnicodeEncoding UE = new UnicodeEncoding();
    byte[] key = UE.GetBytes(encryptionKey);

    using (RijndaelManaged RMCrypto = new RijndaelManaged())
    using (MemoryStream ms = new MemoryStream())
    using (ICryptoTransform decryptor = RMCrypto.CreateDecryptor(key, key))
    using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
    {
        cs.Write(stringToDecrypt, 0, stringToDecrypt.Length);
        cs.FlushFinalBlock();
        return UE.GetString(ms.ToArray());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rijndael 加密 - 仅解密部分字符串 的相关文章

  • 如何在C++中生成非常大的随机数

    我想使用 C 生成 0 2 64 范围内的非常大的随机数 我已经使用了 rand 函数 但它没有生成非常大的数字 有人可以帮忙吗 使用c 11 使用标准c 11的随机库 http en cppreference com w cpp nume
  • 我的 std::hash for std::tuples...有什么改进吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些人可能已经注意到 std hash 不支持元组 所以我添加了一个重载 它看起来比我到目前为止看到的解决方案 更好 有人有进一步减少这段代码的
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 节点*链表中的下一个

    我是数据结构和算法的新手 我遇到了以下代码 typedef struct node int data node next 谁能告诉我为什么我们要声明节点 next next 不能声明为 int next 吗 因为你希望能够做到n gt ne
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 'iter' 的名称查找已更改为新的 ISO 'for' 范围

    我正在尝试编译下面的两个文件 但从编译器收到错误消息 gcc 4 3 3 Linux 错误位于带有以下符号的行 LINE WITH ERROR 我做错了什么 我该怎么改变 路易斯 g c b h b cpp b cpp In functio
  • 展开 std::reference_wrapper 的成本

    Given include
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段

随机推荐

  • 简单页面应用程序路由到相同视图或控制器 SailsJS

    如何将多个 url 路由到同一控制器或视图以使用 Angular 单页应用程序 我可以做到这一点 但我觉得很丑 view homepage login view homepage register view homepage troller
  • PHP - 使用简单 XML 复制 XML 节点

    我需要使用简单 XML 加载 XML 源 复制现有节点及其所有子节点 然后在渲染 XML 之前自定义此新节点的属性 有什么建议吗 SimpleXML 不能做到这一点 所以你必须使用DOM 好消息是 DOM 和 SimpleXML 是同一枚硬
  • 如何在mongodb中删除具有特定条件的重复项?

    例如 我的收藏中有以下文档 id GuqXmAkkARqhBDqhy beatmapset id 342537 version MX diff approach 5 artist Yousei Teikoku title Kokou no
  • 如何在 C# 中使用“for”循环创建动态递增变量

    如何在 C 中使用 for 循环创建动态递增变量 像这样 track 1 track 2 track 3 track 4 so on 您无法创建动态命名的变量 您所能做的就是创建一些集合或数组 并对其进行操作 我认为最适合你的课程是通用课程
  • Magento 2 重定向到支付网关错误

    我已经使用转换器转换了我的 Magento 1 支付模块 我想我需要修改代码以适应 Magento 2 我被困在结账过程中 重定向到支付网关 以下是当 magento 尝试重定向到时我的错误http localhost 8083 mm pd
  • Alfresco 社区版和 Alfresco 企业版有什么区别?

    Alfresco 社区版和 Alfresco 企业版有什么区别 它提供的两种功能有什么区别吗 我们可以下载具有更长试用许可证的企业版吗 企业版是商业支持的版本 除了支持之外 您还可以获得补丁 更新 赔偿以及与认证合作伙伴的联系 从功能的角度
  • 如何在Python中获取__main__模块的文件名?

    假设我有两个模块 a py import b print name file b py print name file 我运行 a py 文件 这打印 b C path to code b py main C path to code a
  • 如何使 WinHttpCrackUrl 在 64 位下工作

    我有 Visual Basic for Applications 代码 使用WinHttp并可与在 32 位 Windows XP 上运行的 32 位 Office 2010 完美配合 即使可以正常编译 相同的代码也无法在 64 位 Win
  • 如何通过 ssh 使用参数执行远程命令?

    In my bashrc我定义了一个稍后可以在命令行上使用的函数 function mycommand ssh email protected cd testdir test sh 1 使用该命令时 只需cd命令在远程主机上执行 这test
  • Python,函数改变值

    所以我在让这个系统正常工作时遇到了麻烦 我不确定我是否提出了正确的问题 但这就是正在发生的事情以及我想要发生的事情 money 1 def Stats print print money str money def gainM money
  • 如何在Jmeter中根据另一个值提取json值

    在 Jmeter 中 我试图从 json 中提取值 这是我收到的 json 响应 Definition key 1124 Id 1743 srcID 3427 pcKey 1 userName abraizada cName JMeter2
  • 使用 JavaScript 解析 XML [重复]

    这个问题在这里已经有答案了 我需要能够使用 JavaScript 解析 XML XML 将位于变量中 我不想使用 jQuery 或其他框架 我看过这个 XML gt jQuery 读取 我从你的猜测最后一个问题在此之前 20 分钟询问 您正
  • 使用tensorflow时Python内核死掉

    我在 Windows 7 操作系统中的 anaconda 4 3 1 64 位 内的 python 3 5 2 下使用tensorflow 仅限 CPU 版本 当我运行以下代码时 python内核死掉了 无法重新启动 出现一些错误 但没有错
  • 将屏幕截图保存为 R Selenium 中的变量

    我正在尝试将 Selenium 的屏幕截图存储到变量中 以便我可以计算出它的高度 library RSelenium library magick server lt remoteDriver remoteServerAddr localh
  • 用 Rust 编写不动点函数

    我刚刚开始 Rust 教程 并以使用递归的此类代码结束 extern crate rand use std io use rand Rng use std cmp Ordering use std str FromStr use std f
  • 基本 CSS 悬停图像交换?

    我是网络开发的超级初学者 我有一个关于尝试 交换 两个图像的问题 我已经编写了 CSS 和标记 但由于某种原因它似乎不起作用 当将鼠标悬停在第一个图像上时 应该交换的第二个图像只是位于页面上第一个图像的顶部 CSS home margin
  • 四舍五入的奇怪之处——“100”有什么特别之处? [复制]

    这个问题在这里已经有答案了 有人对 haskell 中这种奇怪的舍入有解释吗 GHCi 版本 7 2 1 一切看起来都很好 除非我乘以 100 Main gt 1 1 1 1 Main gt 1 1 10 11 0 Main gt 1 1
  • 如何将 HTML 表中的数据插入到 mysql 数据库

    我有一个HTML表格与信息 现在我可以add rows and delete带有使用 javascript 的按钮的行 我还可以使用以下命令直接将信息添加到数据库中Add Rows按钮 然后使用以下命令从数据库中删除数据删除行按钮 但我不想
  • Linq if/else 条件?

    我知道这可能是一个新手问题 有没有办法根据布尔值选择不同的搜索条件 稍后在代码中 我想循环访问该对象 alDisabledPrograms 我知道 if else 不正确 我把它放在那里是为了表明我希望如何处理它 我尝试将其放入更大的 if
  • rijndael 加密 - 仅解密部分字符串

    只有部分字符串被解密 我认为这与我的编码有关 发生的情况如下 string s The brown fox jumped over the green frog string k urieurut string enc EncryptStr