OTP认知
动态口令(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方便技术手段,是一种重要的双因素认证技术,动态口令认证技术包括客户端用于生成口令产生器的,动态令牌,是一个硬件设备,和用于管理令牌及口令认证的后台动态口令认证系统组成。

一、OTP历史溯源

   动态口令(OTP)有一个同名确不同翻译的前辈,一次性密码(OTP, One-Time Pad),也叫密电本,是一种应用于军事领域的谍报技术,即对通信信息使用预先约定的一次性密电本进行加密和解密,使用后的密电本部分丢弃不再使用,能够做到一次一密。如果看过一些国内的谍战电视剧可能会对在二战时期,日本轰炸重庆中的一个号称“独臂大盗”的日本间谍有印象的话,他同日军通电使用的就是一次性密码技术,使用诺贝尔获奖的小说《The Good Earth》进行谍报编码,最后是被称为美国密码之父的赫伯特·亚德利破获。而目前在安全强认证领域使用的OTP动态密码技术,源于最早由RSA公司于1986年开发的RSA SecureID产品,动态密码并不是一次性密码技术,而是动态一次性口令技术。目前,国际上动态口令OTP有2大主流算法,一个是RSA SecurID ,一个是OATH组织的OTP算法。如果在国内来说的话,另一个是国密的OTP密码算法。RSA SecurID使用AES对称算法,OATH使用HMAC算法,国密算法使用的国密SM1(对称)和SM3(HASH)算法。

二、OTP认证原理与同步方法

   动态口令的基本认证原理是在认证双方共享密钥,也称种子密钥,并使用的同一个种子密钥对某一个事件计数、或时间值、或者是异步挑战数进行密码算法计算,使用的算法有对称算法、HASH、HMAC,之后比较计算值是否一致进行认证。可以做到一次一个动态口令,使用后作废,口令长度通常为6-8个数字,使用方便,与通常的静态口令认证方式类似,使用方便与系统集成好,因此OTP动态口令技术的应用非常普遍,可以应用于多种系统渠道使用,如:Web应用、手机应用、电话应用、ATM自助终端等。

动态口令的同步机制有3种,即时间型、事件型和挑战与应答型,目前应用最多的是时间型动态口令,挑战与应答型动态口令的应用也逐渐增多,并且动态口令逐渐变为多种同步类型复合的机制发展,如时间+挑战与应答型。

   目前在信息系统中使用的增强型认证技术包括:1 USBKey: 申请PKI证书。2 动态口令卡:打印好的密码刮刮卡。3 动态短信:使用电信通道下发口令。4 IC卡/SIM卡:内置与用户身份相关的信息。5 生物特征:采用独一无二的生物特征来验证身份,如指纹。6 动态令牌:动态口令生成器和认证系统。

现在直接上代码实现OTP动态密码:

private static final int[] DIGITS_POWER= {1,10,100,1000,10000,100000,1000000,10000000,100000000};public static byte[] hmac_sha1(byte[] keyBytes, byte[] text)throws NoSuchAlgorithmException, InvalidKeyException{try {//ֵMac hmacSha1;try {hmacSha1 = Mac.getInstance("HmacSHA1");} catch (NoSuchAlgorithmException nsae) {hmacSha1 = Mac.getInstance("HMAC-SHA-1");}SecretKeySpec macKey =new SecretKeySpec(keyBytes, "RAW");hmacSha1.init(macKey);return hmacSha1.doFinal(text);} catch (GeneralSecurityException gse) {throw new UndeclaredThrowableException(gse);}}public static String generateOTP(byte[] secret,long movingFactor,int codeDigits)throws NoSuchAlgorithmException, InvalidKeyException{StringBuffer result = new StringBuffer("");byte[] text = new byte[6];for (int i =text.length-1; i >=0; i--) {text[i] = (byte) (movingFactor & 0xff );   //movingFactor >>= 6;}byte[] hash = hmac_sha1(secret, text);     //Step 1: Generate an HMAC-SHA-1 value int offset =( hash[hash.length - 1] & 0xf)+3;   //int binary =((hash[offset] & 0x7f) << 24)| ((hash[offset - 1] & 0xff) << 16)| ((hash[offset - 2] & 0xff) << 8)| (hash[offset - 3] & 0xff);           //Generate a 4-byte string int otp = binary % DIGITS_POWER[codeDigits-1];result .append(Integer.toString(otp));while (result.length() < codeDigits) {result.insert(0, "0");                    //Compute an HOTP value}return result.toString();}

测试:

OTP动态密码_Java代码实现相关推荐

  1. 免otp动态密码登录堡垒机

    环境准备 安装brew 参考文档:https://brew.sh/index_zh-cn.html 安装oath-toolkit 和expect brew install oath-toolkit b ...

  2. 怎么用java做动态壁纸_java代码实现炫酷壁纸效果

    前言 今天无意之间翻出了大一时候学JAVA GUI Swing 时候的java代码,发现了一个有趣的代码,就是用java代码跑出一个炫酷的壁纸效果的动图,跑了一下,感慨颇多,当时就是因为做这个,查了好 ...

  3. OTP动态令牌工作原理分析

    OTP动态令牌是一种新型的强身份认证的信息安全产品,由于其具有使用简单,携带方便,安全性高,美观时尚等优点,已经广泛应用在网银系统,电子办公系统,网络游戏,网络支付等众多领域. OTP原理: OTP动 ...

  4. OTP 动态口令验证

    OTP 动态口令验证. 简介 动态口令(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态 ...

  5. 【IoT】加密与安全:动态密码 OTP 算法详解

    动态密码,亦称一次性密码(One Time Password, 简称 OTP),是一种高效简单又比较安全的密码生成算法,在我们的生活以及工作中随处可见. 1.动态密码背景介绍 动态密码是指随着某一事件 ...

  6. OTP:Java一次动态密码、付款码原理

    1. 什么是OTP 一次性密码(One Time Password,简称OTP),又称"一次性口令",是指只能使用一次的密码. 2. OTP原理 动态密码的产生方式,主要是以时间差 ...

  7. java 动态密码错误_什么是OTP:Java一次动态密码、付款码原理

    1. 什么是OTP 一次性密码(One Time Password,简称OTP),又称"一次性口令",是指只能使用一次的密码. 1 2. OTP原理 动态密码的产生方式,主要是以时 ...

  8. [转载] 动态口令,动态密码生成(OTP)

    参考链接: Python | 生成一次性密码(OTP)的程序 动态口令,动态密码生成(OTP) https://www.aliyun.com/jiaocheng/374279.html

  9. OTP一次性动态密码工具实现

    对于企业内部信息安全或行业安全合规性需求,3A认证.授权.审计是必要的基础安全审查项.认证安全机制要求双因素认证,从技术要可使用基于数字证书和OTP来实现满足. OTP分为两种技术算法HOTP(基于次 ...

最新文章

  1. C++右值引用与转移和完美转发
  2. 7.STM32中对DMA_Config()函数的理解(自定义)测试DMA传输数据时CPU还可继续工作其他的事
  3. HttpRequest获取文件流,HttpResponse输出文件流
  4. 如何高效维持网络长连接
  5. PHP底层原理分析和底层扩展编写
  6. Java开发Web Service的简介
  7. ahp层次分析法软件_层次分析法在历史街区研究中的应用简析
  8. 创建数据库_详解Oracle数据库物化视图及创建物化视图索引
  9. [luoguP2831] 愤怒的小鸟(状压DP)
  10. Java中的管程Monitor
  11. 矩阵快速乘法---代码
  12. 游戏策划笔记:工作感受感官引导
  13. 双子星IPTV桌面APK源码 网络电视机顶盒APP源码带php后台
  14. 计算机联锁静态数据表,计算机联锁功能.doc
  15. python 复制到剪贴板_Python脚本将文本复制到剪贴板
  16. 数学建模灵敏度分析是什么?为什么获奖论文基本都有!【科研交流】
  17. 镁光闪存颗粒对照表_海力士、南亚、镁光内存颗粒编码解析,妈妈再也不用担心你买内存条了...
  18. CuraEngine和Cura配置(Ubuntu18.04环境)
  19. Robomaster视觉组成长之路
  20. HI3516DV300 图像输入

热门文章

  1. 简单Java的商品模块功能
  2. win10忘记密码_Win10系统设置u盘密码的操作过程
  3. QCon 北京 2021:Pulsar PMC 成员翟佳出席并演讲
  4. 【PS基础】-照片拼接基础
  5. 最强大的Mac软件卸载清理工具 App Cleaner Uninstaller Pro 7.8 Mac版(内附安装包链接)
  6. 智慧果园系统——以水肥一体化系统功能为基础实现智慧果园系统项目 需求文档
  7. 2021年安全员-C证(陕西省)考试资料及安全员-C证(陕西省)新版试题
  8. js中如何判断undefined
  9. 论华为云的气质与修养
  10. 微信部分功能故障 已全部恢复