ruby - 在 Ruby 中将字符串加密或散列为十进制数
问题描述
在我们的一个注册过程中,在一个 Ruby on Rails 应用程序中,我想向某人发送一封电子邮件,其中包含一个 6 位数字代码,他们需要将其复制或输入到页面上的框中。
我想我可能会这样做是在页面上的一个隐藏字段中添加一个字符串,例如,在生成电子邮件时,它与我们代码库中的一些密钥组合,然后散列或加密为一系列十进制数字. 然后,我将其中的最后六个放入电子邮件中。
提交表单后,使用原始字符串和用户输入的 6 位数字,我可以对字符串重复该过程并测试它是否产生与用户输入的相同的 6 位数字。
问题是:如何对字符串进行哈希/加密以获得一系列十进制数字?原始字符串可以是任何东西(包括一组不同的十进制数字),它只需要是真正随机生成的东西。
解决方案
注意: 请勿将此用作安全措施。您已声明您打算仅将其用作一种 diy 验证码系统,并且在该上下文中提供了此答案。
OpenSSL 提供了良好的散列函数。一旦你有了十六进制的哈希,该to_i
方法就会接受一个基本参数,所以转换为十进制很简单。然后回到字符串,因为这样更容易获取最后一个字符。
require 'openssl'
hash = OpenSSL::Digest::SHA256.hexdigest('user@example.com' + Random.new_seed.to_s)
message = hash.to_i(16).to_s.chars.last(6).join
然后,您可以存储其中的任何部分以及到期时间。
推荐阅读
- wcf - Remoting 和 WCF/coreWCF 的历史
- java - 如何启用透明 AnchorPane 的拖动?
- tableau-api - Tableau:具有不同字段的表之间的关系
- python - 将 python 字典插入 postgres jsonb 字段
- angular - 在 Angular 6 中运行有角度的打字稿代码
- linux - 如何使用多个虚拟控制台将 GNU Screen Shell 脚本制作为 SSH
- excel - Excel VBA - 将 PDF 保存到一封电子邮件中,而不是创建多个单独的电子邮件
- html - 使用 CSS 为段落中的特定句子设置样式
- ffmpeg - 如何将(覆盖)ffmpeg组合为脚本
- javascript - 如何使用 JavaScript 将相同的计算放在表格的第一行到第二行?我错过了什么?