OTP::Java一次动态密码、付款码原理一次动态密码、付款码原理
1. 什么是什么是OTP
一次性密码(One Time Password,简称OTP),又称“一次性口令”,是指只能使用一次的密码。
2. OTP原理原理
动态密码的产生方式,主要是以时间差做为服务器与密码产生器的同步条件。在需要登录的时候,就利用密码产生器产生动态
密码,OTP一般分为计次使用以及计时使用两种,计次使用的OTP产出后,可在不限时间内使用;计时使用的OTP则可设置
密码有效时间,从30秒到两分钟不等,而OTP在进行认证之后即废弃不用,下次认证必须使用新的密码,增加了试图不经授
权访问有限制资源的难度。
计算公式:
OTP(K,C) = Truncate(HMAC-SHA-1(K,C))
3.Java实现全代码实现全代码TOTP
该代码可以直接运行
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.lang.reflect.UndeclaredThrowableException;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.util.Date;
public class TOTP {
public static void main(String[] args) {
try {
for (int j = 0; j < 10; j++) {
String totp = generateMyTOTP("account01", "12345");
System.out.println(String.format("加密后: %s", totp));
Thread.sleep(1000);
}
} catch (final Exception e) {
e.printStackTrace();
}
}
/**
* 共享密钥
*/
private static final String SECRET_KEY = "ga35sdia43dhqj6k3f0la";
/**
* 时间步长 单位:毫秒 作为口令变化的时间周期
*/
private static final long STEP = 5000;
/**
* 转码位数 [1-8] */
private static final int CODE_DIGITS = 8;
评论0