问题标签 [block-cipher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1599 浏览

encryption - AES 128 解密,密文比密钥短

我们正在开发一个应用程序,该应用程序必须处理由 LoraWan ( https://www.lora-alliance.org )加密的数据

我们已经找到了他们如何加密数据的文档,并且在过去的几天里一直在阅读它(https://www.lora-alliance.org/sites/default/files/2018-04/lorawatm_specification_-v1 .1.pdf ) 但目前仍然无法解决我们的问题。

我们必须使用带有零填充的 AES 128 位 ECB 解密来解密消息,但问题是它不起作用,因为我们收到的加密消息对于 AES 128 来说不够长,因此算法返回“数据不是完成块”的最后一行异常。

我们收到的一个示例密钥是这样的:D6740C0B8417FF1295D878B130784BC5(不是真正的密钥)。它是 32 个字符长,因此是 32 个字节,但如果将其视为十六进制,则它变为 16 个字节长,这是 AES 128 位所需要的。这是我们用来从字符串转换十六进制的代码:

(上面代码需要注意的一点是,我们不确定要使用什么编码,因为我们在 Lora 文档中找不到它并且他们没有告诉我们,但是根据这个小设置,我们可能会搞砸我们的解密(尽管我们已经尝试了所有可能的组合,ascii、utf8、utf7 等))

我们收到的示例消息是:d3 73 4c,我们假设它也是十六进制的。这只有 6 个字节,如果我们将其从十六进制转换为普通字节,则需要 3 个字节,而我们需要最少的 16 个字节来匹配密钥长度。

这是我们正在使用的 Aes 128 解密代码:

所以很明显这将在 sr.ReadToEnd() 处返回“数据是一个不完整的块”。

正如您从示例中看到的那样,在注释掉的行中,我们还尝试使用正确长度的完整零字节数组(16 - cipherText)将文本“填充”到正确的大小,在这种情况下,算法运行很好,但它返回完整的乱码,而不是原始文本。

我们已经尝试了所有的操作模式,并且也使用了填充模式。除了密文和该文本的密钥,他们没有为我们提供任何东西。也没有初始化向量,所以我们假设我们应该每次都生成它(但对于 ECB,它甚至不需要 iirc)

更重要的是,他们能够很好地加密-解密他们的消息。最令人费解的是,我已经用谷歌搜索了好几天了,我在 google 上找不到一个 SINGLE 示例,其中 CIPHERTEXT 在解密期间比密钥短。

显然,我发现了他们正在加密的消息比所需消息短的示例,但这就是加密端的填充(对吗?)。这样当您收到填充消息时,您可以告诉算法使用什么填充模式使其长度正确,这样它就可以将填充与消息分开。但在所有这些情况下,解密期间收到的消息的长度都是正确的。

所以问题是——我们做错了什么?有没有办法用比密钥短的密文解密?还是他们通过生成太短的密码而在某个地方搞砸了?

谢谢你的帮助。

0 投票
1 回答
509 浏览

java - Java:Javax Cipher 类中默认设置哪种模式?

我正在努力保护一个用 Java 编写的聊天应用程序(它是从互联网上下载的,现在我想保护它以便学习)。我已阅读文档,但如果我没有明确设置,我无法弄清楚默认设置了哪种加密模式。是欧洲央行吗?如果是这样,就聊天应用程序而言,它与其他加密模式之间的主要区别是什么?值得一提的是,我在发帖之前看过这个解释,因为我仍然无法弄清楚我的问题的答案。

我加密/解密传输的消息的方式是:

  • 客户端写入一条消息,该消息被加密 (AES) 并发送到服务器
  • 服务器解密消息并将其广播给服务器上的所有用户

我会说这是欧洲央行。

我希望有人可以为我澄清!

0 投票
1 回答
1650 浏览

java - 无法初始化 cipher.init()

我正在尝试读取大小为 1KB 的文件,然后在 CBC 模式下使用 AES 算法对其进行加密和解密。当我尝试初始化密码时,它会引发错误。请在下面找到代码。我在密码类中找不到一个 init 方法,它接受“加密模式”、“密钥”和类 IvParameterSpec 的初始化向量。我可以看到带有期望参数的 init 方法,例如(int 加密模式、密钥密钥、AlgorithmParameters algoParameters、SecureRandom secureRandom)

我是否需要将我的密钥和初始化向量转换为所需的类。任何进一步推进的见解都会有所帮助。

在此处输入图像描述

0 投票
2 回答
1503 浏览

encryption - 在 DES 算法中使用 CTR 模式(在 python 中)

我想通过使用 PyCryptodome 包在 python 中的 DES 算法中使用 CTR 模式。我的代码出现在这篇文章的末尾。但是我收到了这个错误:“TypeError:不可能为短块大小创建一个安全的随机数”。值得一提的是,此代码适用于 AES 算法,但不适用于 DES、DES3、Blowfish 等(64 块大小)。据我所知,CTR 模式可以应用于 64 块密码算法。

非常感谢。

0 投票
1 回答
147 浏览

java - Java 密码在加密数据方面的可靠性如何?

我正在尝试学习 Java Cipher Crypto,但对下面的代码有一些疑问:

  1. 为什么keyBitSize设置为 256 时会出现 Invalid Key Exception (invalid key size)?密码是否限制为 128 位?

  2. 此加密方法是否始终生成一致的加密字符串长度 11(设置为 时keyBitSize = 128)?

  3. 此方法是否会截断任何长度更长的纯文本输入字符串?

  4. 在将加密值存储到 MySQL 数据库之前使用这种方法加密用户输入是否是一种可靠的安全形式?

0 投票
2 回答
4510 浏览

java - 如何控制加密字符串的长度(密码学 - 加密)

例如,我想传入一个字符串“abc”,然后输出加密字符串应该是 32 字节,当我想传递“abcdef”时,输出也应该是 32 字节。换句话说,我想要固定长度的加密输出。我知道我的上限。就像我知道我的字符串永远不会超过 8 个字符。最多 8 个字符或少于 8 个字符。它永远不会超过 8 个。

如果有人在 java Cipher 中共享代码,那就太好了。

0 投票
2 回答
3325 浏览

encryption - AES 密钥长度和块长度

我已经读到密钥长度和 AES 中的块长度之间没有相关性。但这对我来说没有意义,因为密钥将对块进行异或,它们如何具有不同的长度?

0 投票
0 回答
57 浏览

java - 为什么在一个 Java 类中加密而在另一个类中解密会导致 BadPaddingError?

我有一个测试函数,它在一个 Java 类中返回一个 byte[] FirstClass,:

WhereCipherClass包含我java.crypto.Cipher加密和解密输入的方法。

在另一个 Java 类中SecondClass,我实例化了我的前一个FirstClass并调用它的 testA() 方法,我将它保存到一个byte[]变量中,然后尝试解密它:

为什么在一个 Java 文件中加密一个字符串,然后将生成的 byte[] 传递到另一个 Java 文件来解密它会导致 BadPaddingError?

可以做些什么来解决这个问题?

为什么密码只有在加密和解密都在同一个类中时才起作用,如下所示?:

编辑: 我的CipherClass代码如下要求。

SecretKeyIVParameterSpec发电机:

我的encrypt()方法:

我的decrypt()方法:

0 投票
0 回答
282 浏览

ssl - 在 TLS 密码套件中哪里可以找到分组密码模式

我正在通过在 C# 程序中使用 System.Net Trace Listener 来找出在 TLS 连接上使用的 TLS 密码套件。我在跟踪日志文件中获得以下详细信息:

查看密码套件的解剖结构,从上面的跟踪文件数据中,除了“分组密码模式”之外,我有以下组成密码套件的所有组件:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

我在哪里或如何找到上面的值“GCM”。一些分组密码模式是 GCM、CBC、CCM。

0 投票
0 回答
143 浏览

c# - 如何在 Bouncy Castle 和 C# 中使用 Aria 加密算法

根据thisthis page,Bouncy Castle库包含Aria Cipher算法的实现。但我找不到任何关于如何在 C# 和库中使用此算法的文档?

有人可以帮助我并描述如何使用该库来实现算法吗?

先感谢您