ログイン認証システムのOTP番号とは何ですか? Java(Android)を使用してOTP番号を生成するための特定のアルゴリズムはありますか?またはOTPは乱数のようなものですか?最適化を使用してこれをどのように実現できますか?.
特にセキュリティと暗号化の場合は、車輪の再発明をしないでください。あなたは本当に悪い状態になってしまうかもしれません。
Open Authentication Iniativeによって指定されたHOTPおよびTOTPアルゴリズムのように、コミュニティが合意したアルゴリズムを使用します。これらのアルゴリズムは、Google認証者によっても使用され、これらのRFCで指定されています。それらを読みます。それらは単純です。
Google認証システムを確認してください。 : https://github.com/google/google-authenticator OTP機能を備えたオープンソースプロジェクトです
Android app https://code.google.com/p/google-authenticator/source/browse/?repo=Android のソースコード
サーバー側のソースコードは次のとおりです https://github.com/chregu/GoogleAuthenticator.php
ウィキペディアの記事 http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm
最も簡単な方法は、RandomクラスでDecimalFormatを使用することです。
String otp= new DecimalFormat("000000").format(new Random().nextInt(999999));
System.out.println(otp);
サンプル出力、
002428
445307
409185
989828
794486
213934
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Random otp =new Random();
StringBuilder builder=new StringBuilder();
for(int count=0; count<=10;count++) {
builder.append(otp.nextInt(10));
}
Log.d("Number", " " + builder.toString());
TextView txt = (TextView) findViewById(R.id.txt);
txt.setText(builder.toString());
}
私はそれについての簡単なルールを見つけるのと同じ困難を抱えています。
「TimeSynchronized」など、OTPについて説明するコンテンツはたくさんありますが、システムのセキュリティを維持しながら、簡単な解決策を探していました。
私の場合、2FA(Two Factor Authentication)を保持していますが、これはすでに多くのセキュリティを提供しています。
乱数ジェネレーターのJava)に関する関連情報(SecureRandomを参照)一意の番号を生成する場合は、繰り返しを避けてください。
例:
https://www.securecoding.cert.org/confluence/display/Java/MSC02-J.+Generate+strong+random+numbers
詳細: http://resources.infosecinstitute.com/random-number-generation-Java/
上記の例に基づいて、次のスニペットを実装しました。
public class SimpleOTPGenerator {
protected SimpleOTPGenerator() {
}
public static String random(int size) {
StringBuilder generatedToken = new StringBuilder();
try {
SecureRandom number = SecureRandom.getInstance("SHA1PRNG");
// Generate 20 integers 0..20
for (int i = 0; i < size; i++) {
generatedToken.append(number.nextInt(9));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return generatedToken.toString();
}
}
public static void main(String []args){
Java.util.Random r=new Java.util.Random();
int otp = r.nextInt(1000000); // no. of zeros depends on the OTP digit
System.out.println(otp);
}
First of all OTP stands for one time password it is used for the authentication and
verification this is code is for Java implemented in netbeans IDE
You have to register on the msg91.com for the api genration and that gives free 250
msgs.
import Java.io.BufferedReader;
import Java.io.InputStreamReader;
import Java.net.HttpURLConnection;
import Java.net.URL;
import Java.util.Random;
import javax.swing.JOptionPane;
public class SMS {
String num,otp;
SMS(String mob)
{
num=mob;
}
static String otpGenerator()
{
String numbers = "0123456789";
String x="";
Random rndm_method = new Random();
char[] otp = new char[4];
for (int i = 0; i <4; i++)
{
otp[i]=numbers.charAt(rndm_method.nextInt(numbers.length()));
x=x+otp[i];
}
return x;
}//this is the function for the random number generator for otp
public void sms(String otp)
{
try {
String apiKey = "api key on msg91.com";
String message = otp;
String sender = "TESTIN";
String numbers = num;
String a="http://api.msg91.com/api/sendhttp.php?
country=91&sender="+ sender +"&route=4&mobiles=" + numbers +"&authkey=api
key on msg91.com&message="+message+" ";
//System.out.println(a);
// Send data
HttpURLConnection conn = (HttpURLConnection) new URL(a).openConnection();
String data = apiKey + numbers + message + sender;
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Length", Integer.toString(data.length()));
conn.getOutputStream().write(data.getBytes("UTF-8"));
final BufferedReader rd = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
final StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = rd.readLine()) != null) {
//stringBuffer.append(line);
//JOptionPane.showMessageDialog(null, "message"+line);
System.out.println("OTP SENT !");
}
rd.close();
//return stringBuffer.toString();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e);
}
}
//now you have to call this function and send your number as the parameter
public Start() {
this.setUndecorated(true);
initComponents();
jPasswordField1.setBackground(new Color(0, 0, 0, 0));
jPasswordField1.setOpaque(false);
//jPasswordField1.setBorder(null);
this.setBounds(300, 200, 707, 390);
SMS otp=new SMS("your number");
x=otp.otpGenerator();
otp.sms(x);
}