我想在我的android應用程序中實現OTP功能。 在此應用程序中,註冊用戶將收到一次性密碼密鑰。在接收到OTP後,用戶將能夠使用該OTP成功開立帳戶。我需要做什麼來實現這一目標?Android一次性密碼(OTP)
回答
檢查谷歌驗證器。 https://code.google.com/p/google-authenticator/它與OTP功能的開源項目的Android應用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
可用噸的資源能否請您就如何使客戶端幫助和服務器使用谷歌aunthticator.There沒有提供的文件。 –
您可以從這個實現中檢查RFC的實現示例https://tools.ietf.org/html/rfc6238#appendix-A,您只需要在客戶端和服務器上生成一次性密碼(兩側同樣的過程)。 –
源代碼,我實現一個非常簡單的方法OTP ..
- 活動會生成一個隨機的5位數字並通過短信網關發送給手機號碼。
- 收到短信,SMS正文由Broadcast Reciever讀取,並將SMS主體中的代碼複製到OTP EditText。
- 如果通過短信發送的活動和代碼生成的隨機代碼相同,則用戶應該進一步訪問。
你能分享我們的代碼或你的github鏈接爲你的代碼 –
分享你的代碼.. – sri
你可以分享你的代碼,請我面臨問題 - https://github.com/rajatbeck/LoginWithOTP/issues/1 原代碼服務器端 - http://www.androidhive.info/2015/08/android-adding-sms-verification-like-whatsapp-part-1/ 和我的應用程序代碼 - http://www.androidhive.info/2015/08/Android系統的加入,手機短信驗證樣的WhatsApp部分-2 /#評論-2990831653 – SameerKhan1406
正如@Vipin提到的,最好的辦法就是實現它你的自我:
首先,你必須生成一個4位數字(或任何你想要的)PIN碼,例如:
int range = 9; // to generate a single number with this range, by default its 0..9
int length = 4; // by default length is 4
public int generateRandomNumber() {
int randomNumber;
SecureRandom secureRandom = new SecureRandom();
String s = "";
for (int i = 0; i < length; i++) {
int number = secureRandom.nextInt(range);
if (number == 0 && i == 0) { // to prevent the Zero to be the first number as then it will reduce the length of generated pin to three or even more if the second or third number came as zeros
i = -1;
continue;
}
s = s + number;
}
randomNumber = Integer.parseInt(s);
return randomNumber;
}
然後,你必須保存這個號碼保存在某個地方,例如在你的喜好:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("OTP_PIN", randomNumber);
editor.commit();
下一步,將使用適當的SMS網關發送動態密碼傳送至相應的電話號碼,對我來說我使用clickATell與我們的PHP服務器發送消息,該api documentation是相當清楚的。如果你想直接從應用程序發送消息,可能是SMSgateway可以提供幫助。
最後一步,是驗證通過短信收到的代碼是一個存儲設備的偏好,這是很簡單,直接的,所有你需要做的是爲用戶提供允許他提供EditText
輸入他的手機收到的代碼,如果代碼與設備首選項中保存的OTP相匹配,請讓他通過該應用程序,否則顯示正確的錯誤消息。
一個優雅的舉動: 不是強制性的,但最好,因爲有很多的應用程序做,你可以提供短信聽衆收聽即將到來的消息,從接收到的信息獲取的代碼,在代碼中顯示它驗證editText
,驗證它是否爲真,通過應用程序。
in manifest。XML:
<receiver
android:name=".Services.SmsListener"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
聽衆:
public class SmsListener extends BroadcastReceiver {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onReceive(Context context, Intent intent) {
Log.d("messageBody", intent.getAction());
if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
try {
String messageBody = "";
for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) {
messageBody = smsMessage.getMessageBody();
}
Intent messageReceived = new Intent(SVPreferences.SMS_RECEIVED);
messageReceived.putExtra("sms", messageBody);
context.sendBroadcast(messageReceived); // when receiving it somewhere in your app, subString the additional text and leave only the code, then place it in the editText and do your verification
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
接收器:
BroadcastReceiver receiveSMS = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
String smsBody = intent.getStringExtra("sms");
String pin = smsBody.replace(getResources().getString(R.string.your_extra_text), "").trim();
editText_confirm_pin.setText(pin);
if (validatePin(pin))
// go through the app
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
- 1. 一次性密碼(OTP)過期餘地
- 2. 代碼的一次性密碼(OTP)C#到Java轉換
- 3. Web服務連接到一個OTP(一次性密碼)
- 4. OTP S/KEY一次性密碼 - 摺疊MD5摘要輸出
- 5. 使用傳出語音呼叫發送一次性密碼(otp)
- 6. 如何從Firebase發送OTP(一次性密碼)
- 7. 如何整合與SAP款Hybris登記表一次性密碼(OTP)選項?
- 8. PHP一次性密碼?
- 9. Mysql,php - 一次性密碼
- 10. 銀行在其密碼生成器令牌上使用哪種OTP(一次性密碼)算法?
- 11. 加密解密錯誤(一次性密碼加密)
- 12. J2EE彈簧安全一次性密碼
- 13. 進度數據庫一次性密碼
- 14. 一次性密碼生成快遞js
- 15. 一次性密碼重置屏幕
- 16. 鎖定政策和一次性密碼
- 17. PHP - 使用一次性墊來存儲加密的密碼
- 18. 爲每個設備創建確定性的一次性密碼
- 19. 使用ceasar加密的OTP加密
- 20. C#中的一次性密碼在一段時間後過期?
- 21. MySQL的密碼一致性
- 22. 使用一次性密碼啓用iOS應用程序
- 23. 如何生成一次性密碼流星JS
- 24. 如何改進一次性密碼系統?
- 25. PHP使用multiOTP的基於時間的一次性密碼
- 26. 可以將一次性密碼用作標識符嗎?
- 27. Nodejs:用speakeasy包生成一次性密碼
- 28. 如何在JavaScript中使用Twilio發送一次性密碼?
- 29. 從電子郵件中提取一次性密碼
- 30. 如何生成一次性密碼列表?
請谷歌,也有對這個 – iec2011007