@א.-ד.-ג. כשאתה מדבר על חיבור לשני מכשירים
מדובר גם על מכשירים "חרדים" דפוקים?
לדוגמא: פלאפון QLYX ונגן SAMVIX
המוזיקה מהנגן תיעצר כשתכנס שיחה לפלאפון?
@3-פינות כמו שכבר כתבו פה
זה מביא תועלת בעיקר למשתמשי חדר מחשבים שהצורה הכי פשוטה עבורם היא קובץ קטן באונקי
אין להם יכולת להשתמש בתוכנות כדוגמת KeePassXC או בתוספי כרום, מוצליחם ככל שיהיו...
כולם טובים ונחמדים אבל לענ"ד עדין הפתרון שלי הכי מהיר
תחשוב על מי שנכנס לחד"מ לשתי דקות ורוצה רק להציץ במייל
במקום לפתוח תוכנות ולהקליד סיסמאות, הוא מקליק על התוכנה שלי וזהו!
לאחר שנחשפתי לפתרון המוצלח של @מדהים - AppCode בניתי סקריפט קטן (כמובן בעזרת AI) שעושה את אותה עבודה אבל בשתי שניות וללא צורך בחיוג לשום מערכת!
הפתרון הוא בעצם קובץ exe שנמצא אצלכם באונקי או בכל מקום אחר ויוצר את קוד האימות בשתי שניות!
כמו אצל @מדהים גם כאן הפתרון מועיל רק למי שכבר יש לו חשבון והוא נמצא בתוכו!!!
אם הקובץ נופל לידים זרות אין להם מה לעשות איתו בלי הסיסמא של החשבון
ועכשיו - להכנת הקובץ:
דרך 1 - כלי מוכן
הורידו את הכלי הזה מחולל מפתחות TOTP.exe
הפעילו, הדביקו את הקוד שקיבלתם מגוגל והמפתח יווצר ליד הכלי
הכלי הוא בעצם מימוש לexe של הדרך השלישית (C#)
אם תרצו אייקון מותאם אישית שימו ליד הכלי קובץ בשם app.ico
צרו בפנקס רשימות קובץ בשם mykey.py והדביקו בו את הקוד הבא
import pyotp
import pyperclip
import sys
# הכנס את הסוד שלך כאן בתוך הגרשיים וללא רווחים
my_secret = "JBSWY3DPEHPK3PXP"
try:
# יצירת אובייקט TOTP
totp = pyotp.TOTP(my_secret)
# חישוב הקוד הנוכחי
current_code = totp.now()
# העתקה ללוח
pyperclip.copy(current_code)
except Exception as e:
# במקרה של תקלה (נדיר)
sys.exit(1)
שימו לב להכניס את ה"סוד" של גוגל, במקום המתאים וללא רווחים
שמרו את הקוד
שלב 4:
הריצו ב-cmd את הפקודה הבאה בתוך התיקיה בה שמרתם את קובץ ה-py
pyinstaller --onefile --noconsole mykey.py
בתיקייה בה שמרתם את קובץ ה-py תיווצר תיקיה בשם dist ובתוכה יהיה קובץ exe שבלחיצה כפולה ייצר עבורכם קוד וישמור אותו ב"לוח" המחשב
לכם רק נותר ללחוץ קונטרול+V בחלון של גוגל...
דרך 3 (#C)
צרו קובץ טקסט מהקוד הבא ותנו לו את השם והסיומת myotp.cs
(הכניסו את ה"סוד" שלכם במקום המתאים
using System;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
class Program {
[STAThread]
static void Main() {
string secret = "הכניסו כאן את ה''סוד'' שלכם ללא רווחים";
try {
byte[] key = Base32Decode(secret);
long counter = DateTimeOffset.UtcNow.ToUnixTimeSeconds() / 30;
string code = GenerateTOTP(key, counter);
Clipboard.SetText(code);
} catch {}
}
static string GenerateTOTP(byte[] key, long counter) {
byte[] counterBytes = BitConverter.GetBytes(counter);
if (BitConverter.IsLittleEndian) Array.Reverse(counterBytes);
using (HMACSHA1 hmac = new HMACSHA1(key)) {
byte[] hash = hmac.ComputeHash(counterBytes);
int offset = hash[hash.Length - 1] & 0xf;
int binary = ((hash[offset] & 0x7f) << 24) |
((hash[offset + 1] & 0xff) << 16) |
((hash[offset + 2] & 0xff) << 8) |
(hash[offset + 3] & 0xff);
int otp = binary % 1000000;
return otp.ToString("D6");
}
}
static byte[] Base32Decode(string input) {
input = input.Trim().ToUpper();
var bits = "";
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
foreach (char c in input) {
int val = alphabet.IndexOf(c);
if (val >= 0) bits += Convert.ToString(val, 2).PadLeft(5, '0');
}
int byteCount = bits.Length / 8;
byte[] bytes = new byte[byteCount];
for (int i = 0; i < byteCount; i++) {
bytes[i] = Convert.ToByte(bits.Substring(i * 8, 8), 2);
}
return bytes;
}
}