问题标签 [message-digest]

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 投票
0 回答
89 浏览

java - BigInteger 总是相同的

我正在尝试为您从我的 Jar 上传到我的服务器的每个文件创建一个唯一的名称。我正在使用MessageDigestMD5 类来创建,但不幸的是我总是得到相同的名称。

我的md5和往常一样,通过打印和验证结果,我知道我的MessageDigest总是不同的,但结果总是一样的BigInt。

0 投票
1 回答
438 浏览

java - 有人可以解释这个 MD5 MessageDigest 代码是如何工作的吗?

我正在使用 MessageDigest 学习 MD5 和 SHA。这是我从使用 MessageDigest 实现 MD5 的类中获得的代码。我很难理解它。

所以它得到了MD5的“实例”。我猜那是MD5算法?然后它更新字节。为什么这样做?然后它使用 md.digest() 创建一个变量字节 b,但我不确定它为什么这样做?然后我认为它使用 for 语句来执行算法并可能填充它(附加 0?)。如果有人能解释得更好一点,我将不胜感激!

0 投票
0 回答
266 浏览

ios - Spring MessageDigestPasswordEncoder encodePassword iOS等效?

过去一天一直在打破我的头,

给定一个令牌和盐,我需要生成一个与 Spring 的 MessageDigestPasswordEncoder.encodePassword 生成的哈希令牌匹配的哈希令牌:

https://github.com/spring-projects/spring-security/blob/master/core/src/main/java/org/springframework/security/authentication/encoding/MessageDigestPasswordEncoder.java

我已经尝试了 CommonCrypto 中可用的所有内容,有 10 种不同的方式,但没有运气。

Java 代码:

公共静态无效主要(字符串[]参数){

有没有我可以用来匹配输出的 c/c++ 库?(我没有上面的那一点,所以我可以运行它,我得到了一个令牌,一个我不能分享的盐〜出于明显的原因〜和预期的输出)

0 投票
1 回答
773 浏览

java - MD5 hashes different values with same input

I have the following Scala function:

When I encrypt the same string, I always get different results, what could be the problem? There are no new lines or spaces at the end of the input strings and all of them have the same length.

0 投票
1 回答
967 浏览

java - 在 Python 和 Java 中散列原始字节会产生不同的结果

我试图在 Java 中复制 Python 2.7 函数的行为,但是当通过 SHA-256 哈希运行(看似)相同的字节序列时,我得到了不同的结果。字节是通过以特定方式(我的 Python 代码示例的第 2 行)操作一个非常大的整数(正好 2048 位长)生成的。

对于我的示例,原始的 2048 位整数分别存储为Pythonbig_intbigIntJava 中的 和 ,并且两个变量都包含相同的数字。

我试图复制的 Python2 代码:

运行此代码会打印以下内容(请注意,我真正感兴趣的唯一结果是最后一个 - 十六进制编码的摘要。其他 3 个打印只是为了看看引擎盖下发生了什么):

现在,下面是我到目前为止的 Java 代码。当我测试它时,输入缓冲区的值相同,但摘要的值不同。(bigInt包含一个与上面 Python 示例中BigInteger包含相同数字的对象)big_int

请注意,在我的 Python 示例中,我使用len(raw_big_int) + 1packed 开始缓冲区,而在 Java 中,我只使用rawBigInt.length. "\x00"在用 Java 编写时,我还省略了额外的 0 字节 ( )。我出于同样的原因做了这两个 - 在我的测试中,调用toByteArray()返回BigIntegerbyte数组已经以 0 字节开头,该 0 字节正好比 Python 的字节序列长 1 个字节。因此,至少在我的测试中,len(raw_big_int) + 1equaledrawBigInt.length是从rawBigInt0 字节开始的,raw_big_int但没有。

好吧,除此之外,这是 Java 代码的输出:

如您所见,缓冲区内容在 Python 和 Java 中看起来相同,但摘要明显不同。有人可以指出我哪里出错了吗?

我怀疑这与 Python 似乎存储字节的奇怪方式有关 - 变量raw_big_int并在解释器中buff显示为类型str,当它们自己打印出来时,它具有与字节几乎相同的 '\x' 的奇怪格式在某些地方他们自己,但在其他地方完全是胡言乱语。我没有足够的 Python 经验来准确理解这里发生了什么,而且我的搜索也没有结果。

此外,由于我正在尝试将 Python 代码移植到 Java 中,因此我不能只更改 Python - 我的目标是编写采用相同输入并产生相同输出的 Java 代码。我四处搜寻(这个问题似乎特别相关),但没有找到任何可以帮助我的东西。在此先感谢您,如果只是为了阅读这个冗长的问题!:)

0 投票
1 回答
546 浏览

cryptography - KECCAK 中使用的 Merkle-Damgård 和海绵函数之间的区别

你好,漂亮的 Stackoverflow 社区!

我很难理解 Merkle-Damgård 构造和 KECCAK 中使用的海绵函数之间的区别。Merkle-Damgård 构造迭代地接收消息块,但就我在描述中发现的内容而言,海绵函数不也是如此吗?两者的插图看起来非常相似,我只是找不到我真正理解的解释。有人可以更容易地解释差异吗?

0 投票
1 回答
1114 浏览

digital-signature - 如何在 Java Card 2.2.1 上实现 SHA256?

我正在尝试在 Java Card 2.2.1 版上实现 RSA 签名。我已经实现了 RSA 2048 并成功测试了它,但是当尝试使用MessageDigest该类进行散列时,我无法得到正确的答案作为响应。

这是我的代码:

但我没有得到正确的答案;不为ALG_SHA也不为ALG_MD5

我想知道问题是什么。我见过的所有样本都使用相同的方法和参数。

0 投票
1 回答
608 浏览

md5 - 如何在 Java Card 2.2.1 上生成 MD5 哈希?

我正在尝试使用支持 MD5 的 Java Card 散列一条 8 字节的消息(可能需要将其放大到 128)。这是我的源代码:

这也是我使用 GPSShell 进行的测试:

我有不同的问题:

  1. 我使用此链接在 MD5 哈希上测试了我的数据,但发现它无法正常工作!我不知道为什么当我使用尽可能简单的代码时这个算法没有正确响应!谁能告诉我这个问题?

  2. 有没有办法向卡发送/接收 256 字节的数据?

  3. GPSShell 有什么更好的替代品?


更新 1:我已经看到了这个链接,但它并没有解决我的问题。

更新 2:对问题 1 的回答返回 GPSShell 和在线计算器中的 Hex 和 ASCII 数据差异。

0 投票
1 回答
1071 浏览

java - MessageDigest.digest() 为具有挪威字符的不同字符串返回相同的哈希值

我正在调用MessageDigest.digest()方法来获取密码的哈希值。如果密码包含挪威字符,例如'ø',此方法为具有不同最后一个字符的不同字符串返回相同的哈希值。 "Høstname1" 并且"Høstname2"具有相同的哈希值,但"Hostnøme1"由于'ø'位置不同,哈希值也会不同。这是使用“utf-8”编码。对于“iso-8859-1”编码,我没有看到这个问题。这是一个已知问题还是我在这里遗漏了什么?

这是我的代码:

0 投票
3 回答
1410 浏览

java - 使用 java 摘要的哈希生成时间变慢

在使用 wildfly 8.2 和 Java 1.7 的生产环境中,我遇到了一个非常奇怪的情况。

情况是,当服务器启动超过 2 周时,登录开始降低性能。我一直在寻找可能表明问题所在的线索。然后在做了一些测试后,我得出的结论是,问题是当以明文形式插入的密码被加密以与已经插入的密码进行比较时。

当执行加密密码的函数时,它需要将近 2 分钟,但当服务器重新启动时,相同的执行时间不到 30 秒。

加密使用 java.security.MessageDigest 生成哈希。特别是使用 SHA-256 进行 50000 次迭代。知道为什么这个过程会随着时间的推移而变慢吗?我正在使用 /dev/urandom 来生成随机数,所以这不应该是问题。

下面是函数代码: