【问题标题】:Create auth token for android with php使用 php 为 android 创建身份验证令牌
【发布时间】:2019-06-05 12:24:52
【问题描述】:

我想使用身份验证令牌,经过各种搜索,我找到了 JWT 令牌和另一种使用 md5 生成令牌的方法。

出于各种原因我不想使用令牌 JWT 和 md5 在我看来名声不好。

所以我找到了一个方法,但我想听听你的意见:

生成字节串:https://www.php.net/manual/en/function.random-bytes.php

然后我把它转换成十六进制。

最后,我将它与我的用户 id 和 salting 连接起来。

我将此发送到我的应用程序(Android 或 Web),而不是在对我的服务的请求期间我解码接收到的令牌,我将看到隐藏在令牌中的 id 中包含的令牌。 那么是不是靠蛮力找token比较难?

注意 1:我想在未来刷新令牌,但目前它应该无限期发行。

注意 2:我不想只在 php 中使用库或框架。

代码:

$bytes = random_bytes(32);
$part=bin2hex($bytes));
$shortpart=substr($part,0,17);
$id = #userid
$salt=#customsalt
$token=shortpart.$id.$salt;

例子:

$shortpart =f2e4d1f2a2dfedcf5
$id=1
$salt=4d2ze121
$token=f2e4d1f2a2dfedcf514d2ze121

用户或黑客不知道 id 是否隐藏在令牌中。

【问题讨论】:

  • 您需要向我们展示执行此操作的代码。根据实际实施和使用情况,即使是推荐的安全措施也可能容易受到攻击。
  • “我不想只在 php 中使用库或框架” - 为什么不呢?在安全性方面,通常建议使用经过良好测试的现有库,而不是编写自己的解决方案。很容易错过一些会使您的应用程序受到攻击的东西。
  • 我添加一个代码示例
  • 我要一个开放项目的第一个原因,一些库使用限制性许可证。其次,我希望纯php具有应用程序运行所必需的严格
  • 这里已经回答了这个问题:stackoverflow.com/questions/1846202/…

标签: php android token


【解决方案1】:

经过一些研究,我认为更好的方法是:

$token = bin2hex(openssl_random_pseudo_bytes(32));

并自定义此字符串。

【讨论】:

  • 自 PHP 7 起,random_bytes() 实际上比 openssl_random_pseudo_bytes() 更值得推荐,因为前者是核心的一部分,而 openssl_*-functions 要求您启用 openssl。除此之外,并没有太大的区别,所以我看不出这是什么“解决方案”?它基本上与您已经在做的完全相同。不是刻薄,但我认为您没有足够的知识来自己做这件事。密码学不是一门简单的学科,如果您犯了一个小而简单的错误,您可能会将整个应用程序置于危险之中。
  • 你好@MagnusEriksson 谢谢你的回复,确实我没有足够的密码学知识,所以我请求你的帮助,学习,我现在没有代码,但我想想知道Tom提出的带有random_bytes()的方法是不是好东西
【解决方案2】:

在数据库表中添加一列时间并计算authtoken为:

$time = time();

并将其存储到数据库中。

加密:

$encrypt = base64_encode($time.userid);

解密:

从表中获取时间:

  $decrypt = base64_decode($encrypt);

检查this链接。

【讨论】:

  • 使用这个方法,我的数据库中有:token |时间当我从客户那里得到一个令牌时,我会花时间,如果我有一个带有时间的令牌,我必须计算:时间和令牌:令牌?使用 base64 不是那么安全吗?因为我们看到 == 表示基数所以很容易知道令牌是由时间和数字(id)生成的
  • 请不要将time() 用于此类事情。此外,base64 不是加密,它是编码,这不是一回事。用盐等生成令牌并非易事。如果您至少希望它是安全的,则不是。
猜你喜欢
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 2016-09-11
  • 2016-03-08
  • 2019-10-25
  • 2019-06-28
相关资源
最近更新 更多