当前位置: 首页 > 面试题库 >

在MySQL中存储SHA1哈希值

魏凯捷
2023-03-14
问题内容

我有一个简单的问题,当我想将SHA1哈希的结果存储在MySQL数据库中时发生:

我将散列结果存储在 VARCHAR 字段中多长时间?


问题答案:

我将使用VARCHAR可变长度的数据,但不使用固定长度的数据。由于SHA-1值 始终为
160位长,因此VARCHAR将仅在固定长度字段的长度上浪费一个额外的字节

而且我也不会存储SHA1返回的值。因为每个字符只使用4位,因此需要160/4 =
40个字符。但是,如果每个字符使用8位,则只需要一个160/8 = 20个字符的长字段。

因此,我建议您使用BINARY(20)UNHEX函数将SHA1值转换为二进制。

我比较了BINARY(20)和的存储要求CHAR(40)

CREATE TABLE `binary` (
    `id` int unsigned auto_increment primary key,
    `password` binary(20) not null
);
CREATE TABLE `char` (
    `id` int unsigned auto_increment primary key,
    `password` char(40) not null
);

拥有百万条记录binary(20)需要4456 万,而char(40)需要6457万。 InnoDB发动机。



 类似资料:
  • 问题内容: 我在Redis中存储MessagePacked哈希时遇到问题。我在下面粘贴了一个测试用例。从Redis中提取打包数据并对其进行解压缩时,哈希会略有损坏。当哈希值超出一定长度时,似乎会发生这种情况,尽管我不能肯定地说。 我正在使用Redis 2.4.17(默认配置),Ruby 1.9.3p194,MessagePack 0.4.7和Redis gem 3.0.2。使用节点也会发生相同的问

  • 问题内容: 在Objective-C中,它看起来像这样: 我需要Swift这样的东西,可以吗? 请显示工作示例。 问题答案: 您的Objective-C代码(使用类别)可以直接转换为Swift(使用扩展名)。 首先,您必须创建一个“桥接头”并添加 然后: 这可以写得更短和更快速 Swift 2更新: 要返回以Base-64编码的字符串而不是十六进制编码的字符串,只需替换 与 Swift 3更新:

  • 问题内容: 可能的字段类型: 我该如何决定使用哪个? 问题答案: 如果出于性能原因,该列已建立索引并且您知道自己在做什么。 否则很好。但请确保该列使用ascii字符集。(例如)

  • 问题内容: 我对Redis还是很陌生,希望看看是否有可能。想象一下我正在接收这样的数据: 并为另一个帐户接收此数据: 我想以类似的格式将这些数据保留在Redis中: 对于xyz: 所以问题是我应该使用哪种数据类型来存储此Redis? 问题答案: 如果您的目标是检查是否用作该帐户的解决方案,则解决方案应类似于: 样本数据 执行此操作( 使用redis集 ): 然后,您可以通过以下命令检查是否用作该帐

  • 问题内容: 我想在redis中存储哈希数组,最好的编码方法是什么? 问题答案: AFAIK的唯一方法是取消引用它们。假设您有2个散列数组,例如:。 您将它们分别存储,然后创建一个引用它们全部的SET: 然后,您可以通过查询set:来检索它们全部,然后调用所有返回的键来重建原始的哈希数组。 我希望这是有道理的。而且,如果您找到了更聪明的方法,我将很高兴听到。

  • 问题内容: 我有两个用于计算SHA1的小片段。 一个非常快,但似乎不正确,另一个非常慢,但正确。 我认为转换为问题。 快速版本: 慢版本: 转换方式: 我希望有另一种可能使其运行,因为我需要性能。 问题答案: 我使用了JNI加载的高性能c ++实现。 有关更多详细信息,请发表评论。 编辑: JNI的要求是Android NDK。对于Windows,还需要cygwin或类似的东西。 如果您决定使用c