如何生成6位数的OTP号码

And*_*per 2 java android erlang-otp

登录认证系统中的OTP号是多少?有没有使用java(android)生成OTP号码的特定算法.或者是OTP类似随机数?如何通过优化实现这一目标.

cor*_*nux 17

请不要重新发明轮子 - 特别是在安全和加密的情况下.你可能最终处于一个非常糟糕的状态.

使用社区同意的算法,如Open Authentication Iniative指定的HOTP和TOTP算法.这些算法也由Google身份验证器使用,并在这些RFC中指定.读它们.它们很简单.

http://tools.ietf.org/html/rfc4226

https://tools.ietf.org/html/rfc6238

  • +1用于提供`ietf`链接.对于未来的访问者,找到[java实现](https://svn.forgerock.org/openam/tags/10.0.0-docs/products/amserver/source/com/sun/identity/authentication/modules/hotp/HOTPAlgorithm. JAVA) (3认同)
  • @TheRealChx101 逗你玩!OP 要求使用应该使用的算法,而不是库。我不是 android 或 java 大师。那么我为什么要推荐一个图书馆。贴出来的信息应该足以让他用google找到他喜欢的图书馆。你也可以!试试吧! (2认同)

REM*_*ITH 5

最简单的方法是将 DecimalFormat 与 Random 类一起使用。

String otp= new DecimalFormat("000000").format(new Random().nextInt(999999));
System.out.println(otp);
Run Code Online (Sandbox Code Playgroud)

样本输出,

002428
445307
409185
989828
794486
213934
Run Code Online (Sandbox Code Playgroud)

  • _“java.util.Random 的实例不是加密安全的。请考虑使用 SecureRandom 来获取加密安全的伪随机数生成器,供安全敏感应用程序使用。”_ https://docs.oracle.com/javase/ 8/docs/api/java/util/Random.html (10认同)