【问题标题】:Decrypting string with Microsoft Crypto API with C#使用 C# 使用 Microsoft Crypto API 解密字符串
【发布时间】:2013-09-05 07:11:00
【问题描述】:

所以在我的工作场所,我有一个基于 .NET 的 Web 应用程序,它必须在查询字符串中获取一个加密参数。

提供加密字符串的人是外部承包商,他们更喜欢使用微软的 Crypto API 来加密字符串(几乎是要求。但不能更换承包商,高层决定这些东西......)。

好吧,很公平,AFAIK 我可以用 C# 解密它,但在无休止的搜索之后,我仍然不知道它是如何工作的。

这意味着我什至无法提供示例代码,并且在我可以解密这个字符串之前,我一直被困在这个绑定中。

我拥有的是:

我有他们用来加密的通用密码,我必须用它来解密它。

加密设置为:“CALC_AES_128”哈希:“CALC_MD5”。字符串被加密,然后散列。

所以我想解散它,然后解密它。

我知道有很多问题要问,但我该怎么做呢?

【问题讨论】:

  • 你不能“unhash”(没有使用彩虹表,我认为它不适用,因为它可能是盐渍的)。这就像说你想“取消裁剪照片”。通常,您会将哈希值与执行相同操作时得到的值进行比较。
  • +1 @MarcGravell 可以“取消哈希”的哈希在加密业务中被称为“破碎哈希”。
  • 不,不能对 md5 散列进行反散列处理(彩虹表除外)。让我们这样说吧:MD5 散列始终是 16 字节,无论您输入什么。如果可以不散列,那将是有史以来最棒的压缩技术。您可以观看 16 字节的 10 小时高清电影...
  • 1.物理上、数学上不可能......也许 2. 是 3. 通过 HTTPS 的纯文本(确保关闭压缩)。
  • https 上的纯文本很好。只需确保客户端验证服务器的证书即可。如果您的证书验证接受攻击者的证书,他们可以拦截您的连接。

标签: c# asp.net encryption cryptoapi mscapi


【解决方案1】:

您的外部承包商不知道他在说什么。

哈希被用作活板门功能,一种在不被告知事物是什么的情况下识别事物的方法。它是一种数字指纹。生成 CRYPTOGRAPHICALLY SECURE 哈希的方式意味着,即使给定哈希和算法,也很难创建与指纹匹配的对象。

AES 是一种非确定性密码。不确定性来自初始化向量,这意味着每次都是一个随机数(不是从掷骰子硬编码,咳咳索尼)。这意味着出于所有意图和目的,AES 的输出是纯随机的(除非您有密钥)。好的密码都是为了生成统计上随机的数据而设计的(因此几乎没有数据可以用来构成攻击)。

因此,通过将数据输入到创建随机数据的函数中,然后将其放入陷门函数中,您就产生了真正难以解码的东西(从这个意义上讲,困难在于数学上,您实际上需要的能量比存在于宇宙来计算这个)。

至于如何在查询字符串中以安全的方式发送数据(安全,防止窥探不安全的网络)? .net 支持一个众所周知的协议,可以很好地做到这一点。它被称为 HTTPS。

【讨论】:

  • 还有没有简单的方法可以隐藏敏感信息?
  • 每一层加密都会带来不便。越安全,就越不方便。安全的重点是不方便...使其工作所需的东西越多...攻击者攻击系统所需的东西就越多。
  • 您可以完全放弃 HTTPS,让承包商通过 VPN 隧道进入。那可能更安全......但是如果您需要一个完整的安全系统......幸运的是,我目前对合同持开放态度:P。但是,是的……HTTPS 应该可以正常工作……除非你不信任你的网络服务器或承包商……在这种情况下,你就完蛋了。
  • 呵呵,对不起,这件事我没什么好说的。不管怎样,我已经通知我的上级他们的加密建议是不可行的,我们必须使用 HTTPS。以后我可以再掩盖它,但这只是我个人的牛肉。
  • AES 本身是确定性的。它是一个分组密码,因此只是一个键控排列。它只是一种消耗 IV 并引入随机化的特定操作模式。
猜你喜欢
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
相关资源
最近更新 更多