דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. מחשבים וטכנולוגיה
  3. עזרה הדדית - מחשבים וטכנולוגיה
  4. להורדה | דבר קטן וחמוד - שומר סיסמאות אופלין

להורדה | דבר קטן וחמוד - שומר סיסמאות אופלין

מתוזמן נעוץ נעול הועבר עזרה הדדית - מחשבים וטכנולוגיה
40 פוסטים 10 כותבים 177 צפיות 8 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ה מנותק
    ה מנותק
    המלאך
    כתב נערך לאחרונה על ידי
    #25
    פוסט זה נמחק!
    מ תגובה 1 תגובה אחרונה
    0
    • ה המלאך

      פוסט זה נמחק!

      מ מנותק
      מ מנותק
      מחנה ידידים
      כתב נערך לאחרונה על ידי
      #26
      פוסט זה נמחק!
      תגובה 1 תגובה אחרונה
      1
      • ה המלאך

        @אהל-יהודה סליחה, לא הבנתי נכון.
        אתה עשית בתוכנה שזה עובד רק אם אין חיבור לרשת כרגע?
        איך אפשר לעשות את זה?
        שאלת- האם אפשר לפרוץ - עניתי כן, אם מחוברים לאינטרנט, לא צריך פורץ שיגנוב את המחשב, מספיק לגרום לו להוריד תוכנה זדונית,
        זה עובד אונליין,
        ואז ההאקר יראה "וואו, יש פה תוכנה של סיסמאות" ינסה לפרוץ, ויהיה בהלם,
        "מה? זה נוצר על ידי בינה!"
        כאילו, כל הזמן אומרים לכם שהבינה לא מושלמת בקוד, ואתם כבר נותנים לה שליטה על קוד של תוכנה שאמורה לשמור על הסיסמאות שלכם?
        בקיצור, - לא בא לזלזל,
        רק אומר - תחשבו פעמיים לפני שאתם סומכים על דברים בסגנון הזה.

        יאיר דניאלי מנותק
        יאיר דניאלי מנותק
        יאיר דניאל
        כתב נערך לאחרונה על ידי יאיר דניאל
        #27

        @המלאך כתב בלהורדה | דבר קטן וחמוד - שומר סיסמאות אופלין:

        כאילו, כל הזמן אומרים לכם שהבינה לא מושלמת בקוד, ואתם כבר נותנים לה שליטה על קוד של תוכנה שאמורה לשמור על הסיסמאות שלכם?
        בקיצור, - לא בא לזלזל,
        רק אומר - תחשבו פעמיים לפני שאתם סומכים על דברים בסגנון הזה.

        אחי, מה נסגר איתך?
        מה לא מובן - זה קובץ אופליין - ששומר את הסיסמאות שלך - במקום לשמור אותם בקובץ אקסל.
        ומי ישמע "סומך על AI" - מה זה קשור לקוד שהיא כתבה,היא כתבה את הקוד "לתוכנה" הזו, וילד בן 12 עם ידע במחשבים, פורץ את הסיסמה, אבל לא הבנת את הרעיון - זה לא נועד לאקרים ולא לאף אחד שקצת דומה לזה, זה נועד לאנשים פשוטים שרוצים את הקודים שלהם זמינים גם באופליין - לדוגמא משתמשי חדרי מחשבים. והסיסמה היא בשביל שאיזה חבר סקרן לא יכנס ויראה מה הסיסמאות שלך.

        (אגב, גם אם אקר יפרוץ למחשב שלך - כל עוד תקרא לקובץ HTML הזה "בדיני מים אחרונים והמתסעף" בתוך תיקייה "בלימוד", מה האחוזים שהוא ינסה לבדוק מה כתבת בסוגיא הזו?...)

        ה תגובה 1 תגובה אחרונה
        1
        • יאיר דניאלי יאיר דניאל

          @המלאך כתב בלהורדה | דבר קטן וחמוד - שומר סיסמאות אופלין:

          כאילו, כל הזמן אומרים לכם שהבינה לא מושלמת בקוד, ואתם כבר נותנים לה שליטה על קוד של תוכנה שאמורה לשמור על הסיסמאות שלכם?
          בקיצור, - לא בא לזלזל,
          רק אומר - תחשבו פעמיים לפני שאתם סומכים על דברים בסגנון הזה.

          אחי, מה נסגר איתך?
          מה לא מובן - זה קובץ אופליין - ששומר את הסיסמאות שלך - במקום לשמור אותם בקובץ אקסל.
          ומי ישמע "סומך על AI" - מה זה קשור לקוד שהיא כתבה,היא כתבה את הקוד "לתוכנה" הזו, וילד בן 12 עם ידע במחשבים, פורץ את הסיסמה, אבל לא הבנת את הרעיון - זה לא נועד לאקרים ולא לאף אחד שקצת דומה לזה, זה נועד לאנשים פשוטים שרוצים את הקודים שלהם זמינים גם באופליין - לדוגמא משתמשי חדרי מחשבים. והסיסמה היא בשביל שאיזה חבר סקרן לא יכנס ויראה מה הסיסמאות שלך.

          (אגב, גם אם אקר יפרוץ למחשב שלך - כל עוד תקרא לקובץ HTML הזה "בדיני מים אחרונים והמתסעף" בתוך תיקייה "בלימוד", מה האחוזים שהוא ינסה לבדוק מה כתבת בסוגיא הזו?...)

          ה מנותק
          ה מנותק
          המלאך
          כתב נערך לאחרונה על ידי
          #28

          @יאיר-דניאל הא... 🫩🥱
          למה לא קוראים כל מה שאמרתי?
          לא התכוונתי להאקר שיפרוץ.
          נקטתי את זה בתור דוגמאות בעלמא.
          התכוונתי לתוכנה זדונית.
          היא מועדת לגניבת ססמאות.
          היא לא מסתכלת על השם.
          היא פשוט גונבת.
          והרי יש שלב שהוא מתחבר לאינטרנט, נכון?
          זה מספיק לשלוח את הססמאות הגנובות, למחשב של ההאקר.

          יאיר דניאלי תגובה 1 תגובה אחרונה
          0
          • ה המלאך

            @יאיר-דניאל הא... 🫩🥱
            למה לא קוראים כל מה שאמרתי?
            לא התכוונתי להאקר שיפרוץ.
            נקטתי את זה בתור דוגמאות בעלמא.
            התכוונתי לתוכנה זדונית.
            היא מועדת לגניבת ססמאות.
            היא לא מסתכלת על השם.
            היא פשוט גונבת.
            והרי יש שלב שהוא מתחבר לאינטרנט, נכון?
            זה מספיק לשלוח את הססמאות הגנובות, למחשב של ההאקר.

            יאיר דניאלי מנותק
            יאיר דניאלי מנותק
            יאיר דניאל
            כתב נערך לאחרונה על ידי
            #29

            @המלאך כתב בלהורדה | דבר קטן וחמוד - שומר סיסמאות אופלין:

            התכוונתי לתוכנה זדונית.
            היא מועדת לגניבת ססמאות.
            היא לא מסתכלת על השם.
            היא פשוט גונבת.

            איך היא גונבת?
            סתם בשביל הידע.

            ה תגובה 1 תגובה אחרונה
            0
            • יאיר דניאלי יאיר דניאל

              @המלאך כתב בלהורדה | דבר קטן וחמוד - שומר סיסמאות אופלין:

              התכוונתי לתוכנה זדונית.
              היא מועדת לגניבת ססמאות.
              היא לא מסתכלת על השם.
              היא פשוט גונבת.

              איך היא גונבת?
              סתם בשביל הידע.

              ה מנותק
              ה מנותק
              המלאך
              כתב נערך לאחרונה על ידי
              #30

              @יאיר-דניאל זה תלוי איזה תוכנה.
              בעיקרון או על ידי קריאת ופיענוח הראם,
              או על ידי גניבת הקוד של התוכנה (מנהל הסיסמאות) עצמו.
              כמובן שזה פחות מצוי מגניבה של מנהל הסיסמאות של גוגל.
              כי זה פחות מצוי טכנית (מנהל סיסמאות אופליין).

              cfopuserC תגובה 1 תגובה אחרונה
              0
              • יאיר דניאלי מנותק
                יאיר דניאלי מנותק
                יאיר דניאל
                כתב נערך לאחרונה על ידי יאיר דניאל
                #31

                הנה קוד משופר בהרבה - מעניין אותי מה חושב עליו @מתכנת-חובב - עד כמה זה מאובטח, כמובן במגבלת HTML בודד ובקובץ אופליין.

                שומר קודים - אופליין.zip

                הנה הקוד המלא:

                <!DOCTYPE html>
                <html lang="he" dir="rtl">
                <head>
                    <meta charset="UTF-8">
                    <title>PHANTOM VAULT v13.5 | מדריך למשתמש</title>
                    <style>
                        :root { --primary: #2563eb; --bg: #f8fafc; --card: #ffffff; --text: #1e293b; --border: #e2e8f0; --danger: #ef4444; --success: #22c55e; }
                        body { background: var(--bg); color: var(--text); font-family: system-ui, sans-serif; margin: 0; user-select: none; overflow-x: hidden; }
                        .vault-container { background: var(--card); width: 100%; max-width: 500px; margin: 40px auto; padding: 30px; border-radius: 16px; box-shadow: 0 10px 25px rgba(0,0,0,0.05); border: 1px solid var(--border); position: relative; }
                        header { background: var(--card); padding: 15px 40px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--border); position: sticky; top:0; z-index:10; }
                        input { background: #f1f5f9; border: 1px solid var(--border); padding: 12px; width: 100%; box-sizing: border-box; margin-bottom: 15px; border-radius: 10px; outline: none; transition: 0.2s; }
                        input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); }
                        .btn { cursor: pointer; border: none; background: var(--primary); color: white; padding: 10px 20px; font-weight: bold; border-radius: 8px; transition: 0.2s; }
                        .btn:hover { opacity: 0.9; transform: translateY(-1px); }
                        .item-card { background: var(--card); border: 1px solid var(--border); padding: 15px; margin-bottom: 10px; border-radius: 12px; display: flex; justify-content: space-between; align-items: center; transition: 0.2s; }
                        .item-card:hover { border-color: #cbd5e1; box-shadow: 0 2px 5px rgba(0,0,0,0.02); }
                        
                        /* Toast Notification */
                        #toast { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); background: #1e293b; color: white; padding: 12px 30px; display: none; border-radius: 30px; z-index: 1000; font-size: 14px; box-shadow: 0 5px 15px rgba(0,0,0,0.2); animation: slideUp 0.3s; }
                        @keyframes slideUp { from { bottom: -50px; opacity: 0; } to { bottom: 30px; opacity: 1; } }
                
                        /* Modal Popup */
                        .modal { display: none; position: fixed; z-index: 1001; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); backdrop-filter: blur(4px); animation: fadeIn 0.3s; }
                        .modal-content { background-color: white; margin: 10% auto; padding: 30px; border-radius: 16px; width: 80%; max-width: 500px; box-shadow: 0 15px 35px rgba(0,0,0,0.1); position: relative; }
                        .close-modal { color: #aaa; float: left; font-size: 28px; font-weight: bold; cursor: pointer; margin-top: -10px; }
                        .close-modal:hover { color: var(--danger); }
                        .modal h2 { color: var(--primary); margin-top: 0; }
                        .modal ol { padding-right: 20px; line-height: 1.6; }
                        .modal li { margin-bottom: 10px; }
                        @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
                    </style>
                </head>
                <body>
                
                    <div id="help-modal" class="modal">
                        <div class="modal-content">
                            <span class="close-modal" id="close-help">&times;</span>
                            <h2>איך משתמשים בכספת? 🛡️</h2>
                            <p>ברוך הבא ל-Phantom Vault! הנה מדריך קצר:</p>
                            <ol>
                                <li><b>הוספת סיסמה:</b> מלא את שם האתר והסיסמה בשדות למעלה ולחץ על "שמור בכספת".</li>
                                <li><b>העתקה בטוחה:</b> לחץ על "העתק" ליד סיסמה. היא תהיה זמינה להדבקה למשך 7 שניות בלבד, ואז הלוח ינוקה אוטומטית.</li>
                                <li><b>מחיקה:</b> לחץ על ה-X האדום כדי למחוק רשומה לצמיתות (תצטרך לאשר את הפעולה).</li>
                                <li><b>נעילה אוטומטית:</b> אם לא תיגע בעכבר במשך 3 דקות, הכספת תינעל מעצמה.</li>
                            </ol>
                            <button class="btn" style="width:100%; margin-top:15px;" id="got-it-btn">הבנתי, בוא נתחיל!</button>
                        </div>
                    </div>
                
                    <div id="lock-screen" style="display:flex; min-height:100vh;">
                        <div class="vault-container" style="text-align:center;">
                            <h2 style="color:var(--primary)">PHANTOM VAULT</h2>
                            <input type="password" id="m-pass" placeholder="מפתח מאסטר" autofocus autocomplete="off">
                            <button id="auth-btn" class="btn" style="width:100%">פתיחת הכספת</button>
                        </div>
                    </div>
                
                    <div id="main-ui" style="display:none;">
                        <header>
                            <span style="font-size: 13px; opacity: 0.7;">נעילה בעוד: <b id="timer">03:00</b></span>
                            <button onclick="location.reload()" class="btn" style="background:var(--danger)">נעילה מיידית</button>
                        </header>
                
                        <div class="vault-container" style="max-width: 100%; margin: 20px auto; padding: 20px;">
                            <h3 style="margin-top:0;">הוספת סיסמה חדשה</h3>
                            <div style="display:flex; gap:10px;">
                                <input type="text" id="in-title" placeholder="שם האתר / שירות" style="margin-bottom:0;">
                                <input type="password" id="in-val" placeholder="סיסמה" style="margin-bottom:0;">
                            </div>
                            <button id="save-btn" class="btn" style="width:100%; margin-top:15px; background:var(--success)">שמור בכספת מוצפנת</button>
                        </div>
                        
                        <div id="list" style="max-width:500px; margin:auto; padding-bottom: 50px;"></div>
                    </div>
                
                    <div id="toast"></div>
                
                    <script>
                        (function() {
                            const DB_NAME = "Phantom_Final_RESET_V1"; 
                            let db, activeKey, lastAct = Date.now();
                            const enc = new TextEncoder(), dec = new TextDecoder();
                
                            const init = () => {
                                const req = indexedDB.open(DB_NAME, 1);
                                req.onsuccess = e => { db = e.target.result; };
                            };
                
                            // פונקציית העתקה וניקוי
                            function forceClipboard(text) {
                                const textArea = document.createElement("textarea");
                                textArea.value = text;
                                textArea.style.position = "fixed"; textArea.style.left = "0"; textArea.style.top = "0"; textArea.style.opacity = "0.01";
                                document.body.appendChild(textArea);
                                textArea.focus(); textArea.select();
                                try { document.execCommand('copy'); } catch (err) {}
                                document.body.removeChild(textArea);
                            }
                
                            const getK = async (p) => {
                                const b = await crypto.subtle.importKey("raw", enc.encode(p), "PBKDF2", false, ["deriveKey"]);
                                return crypto.subtle.deriveKey(
                                    { name: "PBKDF2", salt: enc.encode("fixed_salt_v12"), iterations: 100000, hash: "SHA-256" },
                                    b, { name: "AES-GCM", length: 256 }, false, ["encrypt", "decrypt"]
                                );
                            };
                
                            // כפתור פתיחה
                            document.getElementById('auth-btn').onclick = async () => {
                                const p = document.getElementById('m-pass').value;
                                if(!p) return;
                                activeKey = await getK(p);
                                document.getElementById('lock-screen').style.display = 'none';
                                document.getElementById('main-ui').style.display = 'block';
                                render();
                                startTimers();
                                showHelpModal(); // הצגת המדריך בפעם הראשונה
                            };
                
                            // כפתור שמירה
                            document.getElementById('save-btn').onclick = async () => {
                                const t = document.getElementById('in-title').value.trim(), v = document.getElementById('in-val').value;
                                if(!t || !v) return;
                                const iv = crypto.getRandomValues(new Uint8Array(12));
                                const ct = await crypto.subtle.encrypt({name:"AES-GCM", iv}, activeKey, enc.encode(v));
                                const tx = db.transaction("data", "readwrite");
                                tx.objectStore("data").add({t, iv, ct});
                                tx.oncomplete = () => {
                                    document.getElementById('in-title').value = ''; document.getElementById('in-val').value = '';
                                    showToast("הסיסמה נשמרה והוצפנה!"); render();
                                };
                            };
                
                            // רינדור הרשימה
                            async function render() {
                                const list = document.getElementById('list'); list.innerHTML = '';
                                db.transaction("data").objectStore("data").getAll().onsuccess = e => {
                                    e.target.result.forEach(item => {
                                        const div = document.createElement('div'); div.className = 'item-card';
                                        div.innerHTML = `<b>${item.t}</b> 
                                        <div>
                                            <button class="btn copy-btn" style="background:#eee; color:#333; margin-left:5px; padding: 5px 10px; font-size:13px;">העתק</button>
                                            <button class="btn del-btn" style="background:transparent; color:red; border:1px solid red; padding:5px 10px; font-size:13px;">X</button>
                                        </div>`;
                                        
                                        // העתקה
                                        div.querySelector('.copy-btn').onclick = async () => {
                                            const raw = await crypto.subtle.decrypt({name:"AES-GCM", iv:item.iv}, activeKey, item.ct);
                                            const pass = dec.decode(raw);
                                            forceClipboard(pass);
                                            showToast("הסיסמה הועתקה! תימחק בעוד 7 שניות 🛡️");
                                            setTimeout(() => {
                                                forceClipboard("הלוח נוקה - Phantom Vault"); 
                                                showToast("הלוח נוקה סופית.");
                                            }, 7000);
                                        };
                
                                        // מחיקה
                                        div.querySelector('.del-btn').onclick = () => {
                                            if(confirm(`למחוק את ${item.t}?`)) {
                                                db.transaction("data","readwrite").objectStore("data").delete(item.id).onsuccess = render;
                                            }
                                        };
                                        list.appendChild(div);
                                    });
                                };
                            }
                
                            // פונקציות עזר
                            function showToast(m) {
                                const t = document.getElementById('toast'); t.textContent = m; t.style.display='block';
                                setTimeout(() => t.style.display='none', 2800);
                            }
                
                            function startTimers() {
                                setInterval(() => {
                                    let d = 180000 - (Date.now() - lastAct);
                                    if(d <= 0) location.reload();
                                    document.getElementById('timer').textContent = new Date(d).toISOString().substr(14, 5);
                                }, 1000);
                                window.onmousemove = () => lastAct = Date.now();
                                window.onkeydown = () => lastAct = Date.now();
                            }
                
                            // פונקציות המודל (Pop-up)
                            function showHelpModal() {
                                document.getElementById('help-modal').style.display = 'block';
                            }
                            function hideHelpModal() {
                                document.getElementById('help-modal').style.display = 'none';
                            }
                            document.getElementById('close-help').onclick = hideHelpModal;
                            document.getElementById('got-it-btn').onclick = hideHelpModal;
                            window.onclick = (e) => {
                                if (e.target == document.getElementById('help-modal')) hideHelpModal();
                            }
                
                            init();
                        })();
                    </script>
                </body>
                </html>
                

                פירוט על הקוד בספויילר:

                הנה הסבר מפורט על המבנה, הפונקציות ומנגנוני ההגנה של הקוד בגרסה v13.5, המבוסס על הממשק שמוצג בתמונות שהעלית:

                1. מבנה הממשק וחוויית המשתמש (UI/UX)
                  מסך נעילה (Lock Screen): זהו המחסום הראשון. המערכת דורשת "מפתח מאסטר" לפני שהיא חושפת את תוכן הכספת.

                חלונית הדרכה (Help Modal): פונקציה חדשה שקופצת לאחר הכניסה ומסבירה למשתמש איך להוסיף, להעתיק ולמחוק סיסמאות.

                לוח בקרה (Main UI): אזור עבודה נקי הכולל שדות להוספת אתר וסיסמה, ורשימה של כל הפריטים השמורים.

                1. פונקציות הליבה (Core Functions)
                  init() - הקמת בסיס הנתונים: יוצרת בסיס נתונים מקומי בדפדפן בשם . המידע נשמר על המחשב שלך בלבד ולא נשלח לשום שרת חיצוני.Phantom_Final_RESET_V1

                getK(p) - מחולל המפתחות: פונקציה זו לוקחת את מפתח המאסטר שהקשת והופכת אותו למפתח הצפנה מתמטי (AES-GCM) באמצעות אלגוריתם PBKDF2 עם 100,000 הרצות.

                render() - הצגת הרשימה: מושכת את כל הסיסמאות המוצפנות מבסיס הנתונים, מפענחת אותן (רק בזמן אמת בזיכרון) ומציגה אותן בתוך כרטיסיות עם כפתורי פעולה.

                forceClipboard(text) - העתקה "חסינה": כדי לעקוף חסימות אבטחה של דפדפנים בהרצה מקומית, הפונקציה יוצרת שדה טקסט זמני ונסתר, מבצעת בחירה (Select) והעתקה (Copy).

                1. מנגנוני הגנה ואבטחה (Protection Layers)
                  הצפנה מקצה לקצה: כל סיסמה שאתה שומר עוברת הצפנה בשיטת AES-GCM. גם אם מישהו יצליח לפתוח את הקובץ ללא המפתח, הוא יראה רק אוסף תווים חסרי משמעות.

                ניקוי לוח אוטומטי (7 שניות): לאחר העתקת סיסמה, המערכת ממתינה 7 שניות ומבצעת העתקה של המשפט "הלוח נוקה - Phantom Vault". פעולה זו "דורסת" את הסיסמה מהלוח הנוכחי כדי שלא תודבק בטעות במקום אחר.

                הגנה מפני היסטוריית לוח: כפי שראינו בתיעוד הלוח של Windows (), הפעולה של הקוד מוסיפה שורה חדשה של "הלוח נוקה", מה שמוריד את הסיסמה שלב אחד למטה בהיסטוריה.Win+V

                טיימר נעילה (3 דקות): הקוד מנטר תנועות עכבר והקלדה. אם אין פעילות במשך 180 שניות, הדף מתרענן והכספת ננעלת אוטומטית.

                מניעת בחירת טקסט: הקוד כולל הגדרת CSS () שמונעת מהמשתמש לסמן ולהעתיק בטעות טקסטים מהממשק עצמו שלא דרך כפתור ההעתקה המבוקר.user-select: none

                1. כלי ניהול
                  כפתור מחיקה (X): מאפשר הסרת רשומות מבסיס הנתונים. המערכת מבקשת אישור (Confirm) לפני המחיקה כדי למנוע טעויות.

                התראות (Toasts): הודעות קופצות בתחתית המסך שמעדכנות על הצלחת השמירה, ההעתקה או ניקוי הלוח.

                פירוט על צורת העבודה של הקוד:

                1. ניהול נתונים והצפנה (הלב של הכספת)
                בסיס נתונים מקומי (IndexedDB): כל המידע נשמר אך ורק על המחשב שלך בתוך הדפדפן. שום דבר לא נשלח לאינטרנט, מה שמבטיח פרטיות מוחלטת.

                אלגוריתם AES-GCM: זוהי רמת הצפנה צבאית. גם אם מישהו יצליח לגשת לקובץ הנתונים ללא מפתח המאסטר שלך, הוא יראה רק רצף תווים אקראי ובלתי קריא.

                מפתח PBKDF2: הקוד לוקח את הסיסמה שאתה מקליד ומריץ אותה 100,000 פעמים דרך נוסחה מתמטית כדי ליצור מפתח הצפנה חזק במיוחד, מה שמקשה מאוד על ניסיונות פריצה.

                1. מנגנוני העתקה וניקוי (פתרון הבעיות)
                  פונקציית forceClipboard: זו הפונקציה שפיתחנו כדי לעקוף את חסימות הדפדפן שראינו בתמונות שלך. היא יוצרת שדה טקסט נסתר לרגע, מעתיקה ממנו, ואז נמחקת.

                השמדה עצמית (7 שניות): לאחר העתקת סיסמה, המערכת מפעילה טיימר. בסיום 7 השניות, היא מעתיקה באופן אוטומטי את המשפט "הלוח נוקה - Phantom Vault".

                התמודדות עם היסטוריית הלוח: כפי שראינו בצילום המסך של , ווינדוס שומרת היסטוריה. פעולת הניקוי האוטומטית דוחפת את הסיסמה שלך שלב אחד למטה בהיסטוריה ומחליפה את הלוח ה"פעיל" בטקסט חסר משמעות.Win+V

                1. שכבות הגנה אקטיביות
                  נעילה אוטומטית (Timeout): בחלק העליון מופיע טיימר של 3 דקות. אם לא הזזת את העכבר, המערכת מניחה שעזבת את המחשב ונועלת את הכספת אוטומטית כדי שאף אחד לא יראה את התוכן.

                הודעות "Toast": בכל פעם שמתבצעת פעולה (שמירה, העתקה או ניקוי), קופצת הודעה קטנה בתחתית המסך כדי לאשר לך שהפעולה הצליחה.

                חסימת סימון טקסט: הקוד מונע ממך (או ממישהו אחר) לסמן טקסטים מהממשק עם העכבר, כדי למנוע העתקה לא מבוקרת של מידע מהמסך.

                1. ממשק המשתמש החדש
                  מדריך למשתמש (Popup): הוספנו חלונית הסבר שקופצת מיד לאחר הכניסה. היא מסבירה בצורה פשוטה איך להשתמש במערכת (הוספה, העתקה ומחיקה).

                כפתור מחיקה (X): מאפשר לך לנקות רשומות ישנות בקלות. המערכת מבקשת אישור לפני המחיקה כדי למנוע טעויות בלתי הפיכות.

                כפתור נעילה מיידית: נמצא תמיד בראש הדף ומאפשר לך לסגור הכל בשנייה אחת אם מישהו נכנס לחדר.

                ח מתכנת חובבמ 2 תגובות תגובה אחרונה
                0
                • יאיר דניאלי יאיר דניאל

                  הנה קוד משופר בהרבה - מעניין אותי מה חושב עליו @מתכנת-חובב - עד כמה זה מאובטח, כמובן במגבלת HTML בודד ובקובץ אופליין.

                  שומר קודים - אופליין.zip

                  הנה הקוד המלא:

                  <!DOCTYPE html>
                  <html lang="he" dir="rtl">
                  <head>
                      <meta charset="UTF-8">
                      <title>PHANTOM VAULT v13.5 | מדריך למשתמש</title>
                      <style>
                          :root { --primary: #2563eb; --bg: #f8fafc; --card: #ffffff; --text: #1e293b; --border: #e2e8f0; --danger: #ef4444; --success: #22c55e; }
                          body { background: var(--bg); color: var(--text); font-family: system-ui, sans-serif; margin: 0; user-select: none; overflow-x: hidden; }
                          .vault-container { background: var(--card); width: 100%; max-width: 500px; margin: 40px auto; padding: 30px; border-radius: 16px; box-shadow: 0 10px 25px rgba(0,0,0,0.05); border: 1px solid var(--border); position: relative; }
                          header { background: var(--card); padding: 15px 40px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--border); position: sticky; top:0; z-index:10; }
                          input { background: #f1f5f9; border: 1px solid var(--border); padding: 12px; width: 100%; box-sizing: border-box; margin-bottom: 15px; border-radius: 10px; outline: none; transition: 0.2s; }
                          input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); }
                          .btn { cursor: pointer; border: none; background: var(--primary); color: white; padding: 10px 20px; font-weight: bold; border-radius: 8px; transition: 0.2s; }
                          .btn:hover { opacity: 0.9; transform: translateY(-1px); }
                          .item-card { background: var(--card); border: 1px solid var(--border); padding: 15px; margin-bottom: 10px; border-radius: 12px; display: flex; justify-content: space-between; align-items: center; transition: 0.2s; }
                          .item-card:hover { border-color: #cbd5e1; box-shadow: 0 2px 5px rgba(0,0,0,0.02); }
                          
                          /* Toast Notification */
                          #toast { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); background: #1e293b; color: white; padding: 12px 30px; display: none; border-radius: 30px; z-index: 1000; font-size: 14px; box-shadow: 0 5px 15px rgba(0,0,0,0.2); animation: slideUp 0.3s; }
                          @keyframes slideUp { from { bottom: -50px; opacity: 0; } to { bottom: 30px; opacity: 1; } }
                  
                          /* Modal Popup */
                          .modal { display: none; position: fixed; z-index: 1001; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); backdrop-filter: blur(4px); animation: fadeIn 0.3s; }
                          .modal-content { background-color: white; margin: 10% auto; padding: 30px; border-radius: 16px; width: 80%; max-width: 500px; box-shadow: 0 15px 35px rgba(0,0,0,0.1); position: relative; }
                          .close-modal { color: #aaa; float: left; font-size: 28px; font-weight: bold; cursor: pointer; margin-top: -10px; }
                          .close-modal:hover { color: var(--danger); }
                          .modal h2 { color: var(--primary); margin-top: 0; }
                          .modal ol { padding-right: 20px; line-height: 1.6; }
                          .modal li { margin-bottom: 10px; }
                          @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
                      </style>
                  </head>
                  <body>
                  
                      <div id="help-modal" class="modal">
                          <div class="modal-content">
                              <span class="close-modal" id="close-help">&times;</span>
                              <h2>איך משתמשים בכספת? 🛡️</h2>
                              <p>ברוך הבא ל-Phantom Vault! הנה מדריך קצר:</p>
                              <ol>
                                  <li><b>הוספת סיסמה:</b> מלא את שם האתר והסיסמה בשדות למעלה ולחץ על "שמור בכספת".</li>
                                  <li><b>העתקה בטוחה:</b> לחץ על "העתק" ליד סיסמה. היא תהיה זמינה להדבקה למשך 7 שניות בלבד, ואז הלוח ינוקה אוטומטית.</li>
                                  <li><b>מחיקה:</b> לחץ על ה-X האדום כדי למחוק רשומה לצמיתות (תצטרך לאשר את הפעולה).</li>
                                  <li><b>נעילה אוטומטית:</b> אם לא תיגע בעכבר במשך 3 דקות, הכספת תינעל מעצמה.</li>
                              </ol>
                              <button class="btn" style="width:100%; margin-top:15px;" id="got-it-btn">הבנתי, בוא נתחיל!</button>
                          </div>
                      </div>
                  
                      <div id="lock-screen" style="display:flex; min-height:100vh;">
                          <div class="vault-container" style="text-align:center;">
                              <h2 style="color:var(--primary)">PHANTOM VAULT</h2>
                              <input type="password" id="m-pass" placeholder="מפתח מאסטר" autofocus autocomplete="off">
                              <button id="auth-btn" class="btn" style="width:100%">פתיחת הכספת</button>
                          </div>
                      </div>
                  
                      <div id="main-ui" style="display:none;">
                          <header>
                              <span style="font-size: 13px; opacity: 0.7;">נעילה בעוד: <b id="timer">03:00</b></span>
                              <button onclick="location.reload()" class="btn" style="background:var(--danger)">נעילה מיידית</button>
                          </header>
                  
                          <div class="vault-container" style="max-width: 100%; margin: 20px auto; padding: 20px;">
                              <h3 style="margin-top:0;">הוספת סיסמה חדשה</h3>
                              <div style="display:flex; gap:10px;">
                                  <input type="text" id="in-title" placeholder="שם האתר / שירות" style="margin-bottom:0;">
                                  <input type="password" id="in-val" placeholder="סיסמה" style="margin-bottom:0;">
                              </div>
                              <button id="save-btn" class="btn" style="width:100%; margin-top:15px; background:var(--success)">שמור בכספת מוצפנת</button>
                          </div>
                          
                          <div id="list" style="max-width:500px; margin:auto; padding-bottom: 50px;"></div>
                      </div>
                  
                      <div id="toast"></div>
                  
                      <script>
                          (function() {
                              const DB_NAME = "Phantom_Final_RESET_V1"; 
                              let db, activeKey, lastAct = Date.now();
                              const enc = new TextEncoder(), dec = new TextDecoder();
                  
                              const init = () => {
                                  const req = indexedDB.open(DB_NAME, 1);
                                  req.onsuccess = e => { db = e.target.result; };
                              };
                  
                              // פונקציית העתקה וניקוי
                              function forceClipboard(text) {
                                  const textArea = document.createElement("textarea");
                                  textArea.value = text;
                                  textArea.style.position = "fixed"; textArea.style.left = "0"; textArea.style.top = "0"; textArea.style.opacity = "0.01";
                                  document.body.appendChild(textArea);
                                  textArea.focus(); textArea.select();
                                  try { document.execCommand('copy'); } catch (err) {}
                                  document.body.removeChild(textArea);
                              }
                  
                              const getK = async (p) => {
                                  const b = await crypto.subtle.importKey("raw", enc.encode(p), "PBKDF2", false, ["deriveKey"]);
                                  return crypto.subtle.deriveKey(
                                      { name: "PBKDF2", salt: enc.encode("fixed_salt_v12"), iterations: 100000, hash: "SHA-256" },
                                      b, { name: "AES-GCM", length: 256 }, false, ["encrypt", "decrypt"]
                                  );
                              };
                  
                              // כפתור פתיחה
                              document.getElementById('auth-btn').onclick = async () => {
                                  const p = document.getElementById('m-pass').value;
                                  if(!p) return;
                                  activeKey = await getK(p);
                                  document.getElementById('lock-screen').style.display = 'none';
                                  document.getElementById('main-ui').style.display = 'block';
                                  render();
                                  startTimers();
                                  showHelpModal(); // הצגת המדריך בפעם הראשונה
                              };
                  
                              // כפתור שמירה
                              document.getElementById('save-btn').onclick = async () => {
                                  const t = document.getElementById('in-title').value.trim(), v = document.getElementById('in-val').value;
                                  if(!t || !v) return;
                                  const iv = crypto.getRandomValues(new Uint8Array(12));
                                  const ct = await crypto.subtle.encrypt({name:"AES-GCM", iv}, activeKey, enc.encode(v));
                                  const tx = db.transaction("data", "readwrite");
                                  tx.objectStore("data").add({t, iv, ct});
                                  tx.oncomplete = () => {
                                      document.getElementById('in-title').value = ''; document.getElementById('in-val').value = '';
                                      showToast("הסיסמה נשמרה והוצפנה!"); render();
                                  };
                              };
                  
                              // רינדור הרשימה
                              async function render() {
                                  const list = document.getElementById('list'); list.innerHTML = '';
                                  db.transaction("data").objectStore("data").getAll().onsuccess = e => {
                                      e.target.result.forEach(item => {
                                          const div = document.createElement('div'); div.className = 'item-card';
                                          div.innerHTML = `<b>${item.t}</b> 
                                          <div>
                                              <button class="btn copy-btn" style="background:#eee; color:#333; margin-left:5px; padding: 5px 10px; font-size:13px;">העתק</button>
                                              <button class="btn del-btn" style="background:transparent; color:red; border:1px solid red; padding:5px 10px; font-size:13px;">X</button>
                                          </div>`;
                                          
                                          // העתקה
                                          div.querySelector('.copy-btn').onclick = async () => {
                                              const raw = await crypto.subtle.decrypt({name:"AES-GCM", iv:item.iv}, activeKey, item.ct);
                                              const pass = dec.decode(raw);
                                              forceClipboard(pass);
                                              showToast("הסיסמה הועתקה! תימחק בעוד 7 שניות 🛡️");
                                              setTimeout(() => {
                                                  forceClipboard("הלוח נוקה - Phantom Vault"); 
                                                  showToast("הלוח נוקה סופית.");
                                              }, 7000);
                                          };
                  
                                          // מחיקה
                                          div.querySelector('.del-btn').onclick = () => {
                                              if(confirm(`למחוק את ${item.t}?`)) {
                                                  db.transaction("data","readwrite").objectStore("data").delete(item.id).onsuccess = render;
                                              }
                                          };
                                          list.appendChild(div);
                                      });
                                  };
                              }
                  
                              // פונקציות עזר
                              function showToast(m) {
                                  const t = document.getElementById('toast'); t.textContent = m; t.style.display='block';
                                  setTimeout(() => t.style.display='none', 2800);
                              }
                  
                              function startTimers() {
                                  setInterval(() => {
                                      let d = 180000 - (Date.now() - lastAct);
                                      if(d <= 0) location.reload();
                                      document.getElementById('timer').textContent = new Date(d).toISOString().substr(14, 5);
                                  }, 1000);
                                  window.onmousemove = () => lastAct = Date.now();
                                  window.onkeydown = () => lastAct = Date.now();
                              }
                  
                              // פונקציות המודל (Pop-up)
                              function showHelpModal() {
                                  document.getElementById('help-modal').style.display = 'block';
                              }
                              function hideHelpModal() {
                                  document.getElementById('help-modal').style.display = 'none';
                              }
                              document.getElementById('close-help').onclick = hideHelpModal;
                              document.getElementById('got-it-btn').onclick = hideHelpModal;
                              window.onclick = (e) => {
                                  if (e.target == document.getElementById('help-modal')) hideHelpModal();
                              }
                  
                              init();
                          })();
                      </script>
                  </body>
                  </html>
                  

                  פירוט על הקוד בספויילר:

                  הנה הסבר מפורט על המבנה, הפונקציות ומנגנוני ההגנה של הקוד בגרסה v13.5, המבוסס על הממשק שמוצג בתמונות שהעלית:

                  1. מבנה הממשק וחוויית המשתמש (UI/UX)
                    מסך נעילה (Lock Screen): זהו המחסום הראשון. המערכת דורשת "מפתח מאסטר" לפני שהיא חושפת את תוכן הכספת.

                  חלונית הדרכה (Help Modal): פונקציה חדשה שקופצת לאחר הכניסה ומסבירה למשתמש איך להוסיף, להעתיק ולמחוק סיסמאות.

                  לוח בקרה (Main UI): אזור עבודה נקי הכולל שדות להוספת אתר וסיסמה, ורשימה של כל הפריטים השמורים.

                  1. פונקציות הליבה (Core Functions)
                    init() - הקמת בסיס הנתונים: יוצרת בסיס נתונים מקומי בדפדפן בשם . המידע נשמר על המחשב שלך בלבד ולא נשלח לשום שרת חיצוני.Phantom_Final_RESET_V1

                  getK(p) - מחולל המפתחות: פונקציה זו לוקחת את מפתח המאסטר שהקשת והופכת אותו למפתח הצפנה מתמטי (AES-GCM) באמצעות אלגוריתם PBKDF2 עם 100,000 הרצות.

                  render() - הצגת הרשימה: מושכת את כל הסיסמאות המוצפנות מבסיס הנתונים, מפענחת אותן (רק בזמן אמת בזיכרון) ומציגה אותן בתוך כרטיסיות עם כפתורי פעולה.

                  forceClipboard(text) - העתקה "חסינה": כדי לעקוף חסימות אבטחה של דפדפנים בהרצה מקומית, הפונקציה יוצרת שדה טקסט זמני ונסתר, מבצעת בחירה (Select) והעתקה (Copy).

                  1. מנגנוני הגנה ואבטחה (Protection Layers)
                    הצפנה מקצה לקצה: כל סיסמה שאתה שומר עוברת הצפנה בשיטת AES-GCM. גם אם מישהו יצליח לפתוח את הקובץ ללא המפתח, הוא יראה רק אוסף תווים חסרי משמעות.

                  ניקוי לוח אוטומטי (7 שניות): לאחר העתקת סיסמה, המערכת ממתינה 7 שניות ומבצעת העתקה של המשפט "הלוח נוקה - Phantom Vault". פעולה זו "דורסת" את הסיסמה מהלוח הנוכחי כדי שלא תודבק בטעות במקום אחר.

                  הגנה מפני היסטוריית לוח: כפי שראינו בתיעוד הלוח של Windows (), הפעולה של הקוד מוסיפה שורה חדשה של "הלוח נוקה", מה שמוריד את הסיסמה שלב אחד למטה בהיסטוריה.Win+V

                  טיימר נעילה (3 דקות): הקוד מנטר תנועות עכבר והקלדה. אם אין פעילות במשך 180 שניות, הדף מתרענן והכספת ננעלת אוטומטית.

                  מניעת בחירת טקסט: הקוד כולל הגדרת CSS () שמונעת מהמשתמש לסמן ולהעתיק בטעות טקסטים מהממשק עצמו שלא דרך כפתור ההעתקה המבוקר.user-select: none

                  1. כלי ניהול
                    כפתור מחיקה (X): מאפשר הסרת רשומות מבסיס הנתונים. המערכת מבקשת אישור (Confirm) לפני המחיקה כדי למנוע טעויות.

                  התראות (Toasts): הודעות קופצות בתחתית המסך שמעדכנות על הצלחת השמירה, ההעתקה או ניקוי הלוח.

                  פירוט על צורת העבודה של הקוד:

                  1. ניהול נתונים והצפנה (הלב של הכספת)
                  בסיס נתונים מקומי (IndexedDB): כל המידע נשמר אך ורק על המחשב שלך בתוך הדפדפן. שום דבר לא נשלח לאינטרנט, מה שמבטיח פרטיות מוחלטת.

                  אלגוריתם AES-GCM: זוהי רמת הצפנה צבאית. גם אם מישהו יצליח לגשת לקובץ הנתונים ללא מפתח המאסטר שלך, הוא יראה רק רצף תווים אקראי ובלתי קריא.

                  מפתח PBKDF2: הקוד לוקח את הסיסמה שאתה מקליד ומריץ אותה 100,000 פעמים דרך נוסחה מתמטית כדי ליצור מפתח הצפנה חזק במיוחד, מה שמקשה מאוד על ניסיונות פריצה.

                  1. מנגנוני העתקה וניקוי (פתרון הבעיות)
                    פונקציית forceClipboard: זו הפונקציה שפיתחנו כדי לעקוף את חסימות הדפדפן שראינו בתמונות שלך. היא יוצרת שדה טקסט נסתר לרגע, מעתיקה ממנו, ואז נמחקת.

                  השמדה עצמית (7 שניות): לאחר העתקת סיסמה, המערכת מפעילה טיימר. בסיום 7 השניות, היא מעתיקה באופן אוטומטי את המשפט "הלוח נוקה - Phantom Vault".

                  התמודדות עם היסטוריית הלוח: כפי שראינו בצילום המסך של , ווינדוס שומרת היסטוריה. פעולת הניקוי האוטומטית דוחפת את הסיסמה שלך שלב אחד למטה בהיסטוריה ומחליפה את הלוח ה"פעיל" בטקסט חסר משמעות.Win+V

                  1. שכבות הגנה אקטיביות
                    נעילה אוטומטית (Timeout): בחלק העליון מופיע טיימר של 3 דקות. אם לא הזזת את העכבר, המערכת מניחה שעזבת את המחשב ונועלת את הכספת אוטומטית כדי שאף אחד לא יראה את התוכן.

                  הודעות "Toast": בכל פעם שמתבצעת פעולה (שמירה, העתקה או ניקוי), קופצת הודעה קטנה בתחתית המסך כדי לאשר לך שהפעולה הצליחה.

                  חסימת סימון טקסט: הקוד מונע ממך (או ממישהו אחר) לסמן טקסטים מהממשק עם העכבר, כדי למנוע העתקה לא מבוקרת של מידע מהמסך.

                  1. ממשק המשתמש החדש
                    מדריך למשתמש (Popup): הוספנו חלונית הסבר שקופצת מיד לאחר הכניסה. היא מסבירה בצורה פשוטה איך להשתמש במערכת (הוספה, העתקה ומחיקה).

                  כפתור מחיקה (X): מאפשר לך לנקות רשומות ישנות בקלות. המערכת מבקשת אישור לפני המחיקה כדי למנוע טעויות בלתי הפיכות.

                  כפתור נעילה מיידית: נמצא תמיד בראש הדף ומאפשר לך לסגור הכל בשנייה אחת אם מישהו נכנס לחדר.

                  ח מנותק
                  ח מנותק
                  חיים כהן 5
                  כתב נערך לאחרונה על ידי
                  #32

                  @יאיר-דניאל לא הבנתי זה אולי מאובטח יותר אבל הממשק הרבה יותר דפוק עדיף את הממשק הקודם שלך
                  וחוץ מזה שזה ממש לא מאובטח בשום רמה כיון שכל סיסמא שאני מכניס זה נכנס לי למערכת
                  אתה חייב להחזיר את הממשק הקודם ורק לשפר את האבטחה אבל לא לשנות הכל

                  תגובה 1 תגובה אחרונה
                  0
                  • ה המלאך

                    @יאיר-דניאל זה תלוי איזה תוכנה.
                    בעיקרון או על ידי קריאת ופיענוח הראם,
                    או על ידי גניבת הקוד של התוכנה (מנהל הסיסמאות) עצמו.
                    כמובן שזה פחות מצוי מגניבה של מנהל הסיסמאות של גוגל.
                    כי זה פחות מצוי טכנית (מנהל סיסמאות אופליין).

                    cfopuserC מנותק
                    cfopuserC מנותק
                    cfopuser
                    כתב נערך לאחרונה על ידי cfopuser
                    #33

                    לגבי כול הנידון שהיה כאן לגבי אבטחה,
                    אז יש לכם גישה שהיא אולי צודקת טיפה אבל עדיף להמנע ממנה באנגלית קוראים לזה Security through obscurity או sto
                    או בעברית אבטחה על ידי עמימות או ערפול,

                    דוגמא טובה לזה היא, לשים את המפתח בארון חשמל, לא לנעול את הבית כי מי כבר יבדוק ועוד ועוד

                    או לשים קוד בתוכנה שלך ששולח מיילים ולסמוך על זה שאף אחד לא יפתח אותה וישתלט לך על המייל... 😉

                    וזה די מה שקורה כאן, אז אולי זה מאובטח יחסית בגלל העמימות שלה אבל מבחינה טכנית טהורה היא ממש לא,
                    לכן אני פשוט ממליץ על להשתמש בפתרונות קימים שיאפשרו לכם המון פיצ'רים עד בלי די pass key שמירת סיסמאות אוטומטית,
                    סריקת קוד qr, יצירת סיסמאות על ידי אלגוריתמים רציניים ועוד ועוד

                    בקיצור
                    זה לא בטוח הגישה שהולכת פה ועדיף להמנע ממנה בטח שעם סיסמאות חשובות כמו כרטיסי אשראי וכו'
                    כן יש צד לגישה שלכם, אבל היא ממש לא מומלצת.

                    ה תגובה 1 תגובה אחרונה
                    2
                    • cfopuserC cfopuser

                      לגבי כול הנידון שהיה כאן לגבי אבטחה,
                      אז יש לכם גישה שהיא אולי צודקת טיפה אבל עדיף להמנע ממנה באנגלית קוראים לזה Security through obscurity או sto
                      או בעברית אבטחה על ידי עמימות או ערפול,

                      דוגמא טובה לזה היא, לשים את המפתח בארון חשמל, לא לנעול את הבית כי מי כבר יבדוק ועוד ועוד

                      או לשים קוד בתוכנה שלך ששולח מיילים ולסמוך על זה שאף אחד לא יפתח אותה וישתלט לך על המייל... 😉

                      וזה די מה שקורה כאן, אז אולי זה מאובטח יחסית בגלל העמימות שלה אבל מבחינה טכנית טהורה היא ממש לא,
                      לכן אני פשוט ממליץ על להשתמש בפתרונות קימים שיאפשרו לכם המון פיצ'רים עד בלי די pass key שמירת סיסמאות אוטומטית,
                      סריקת קוד qr, יצירת סיסמאות על ידי אלגוריתמים רציניים ועוד ועוד

                      בקיצור
                      זה לא בטוח הגישה שהולכת פה ועדיף להמנע ממנה בטח שעם סיסמאות חשובות כמו כרטיסי אשראי וכו'
                      כן יש צד לגישה שלכם, אבל היא ממש לא מומלצת.

                      ה מנותק
                      ה מנותק
                      המלאך
                      כתב נערך לאחרונה על ידי
                      #34

                      @cfopuser יישר כח,
                      סוף סוף מישהו לוקח את העניניים ליידים.

                      תגובה 1 תגובה אחרונה
                      0
                      • יאיר דניאלי יאיר דניאל

                        הנה קוד משופר בהרבה - מעניין אותי מה חושב עליו @מתכנת-חובב - עד כמה זה מאובטח, כמובן במגבלת HTML בודד ובקובץ אופליין.

                        שומר קודים - אופליין.zip

                        הנה הקוד המלא:

                        <!DOCTYPE html>
                        <html lang="he" dir="rtl">
                        <head>
                            <meta charset="UTF-8">
                            <title>PHANTOM VAULT v13.5 | מדריך למשתמש</title>
                            <style>
                                :root { --primary: #2563eb; --bg: #f8fafc; --card: #ffffff; --text: #1e293b; --border: #e2e8f0; --danger: #ef4444; --success: #22c55e; }
                                body { background: var(--bg); color: var(--text); font-family: system-ui, sans-serif; margin: 0; user-select: none; overflow-x: hidden; }
                                .vault-container { background: var(--card); width: 100%; max-width: 500px; margin: 40px auto; padding: 30px; border-radius: 16px; box-shadow: 0 10px 25px rgba(0,0,0,0.05); border: 1px solid var(--border); position: relative; }
                                header { background: var(--card); padding: 15px 40px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--border); position: sticky; top:0; z-index:10; }
                                input { background: #f1f5f9; border: 1px solid var(--border); padding: 12px; width: 100%; box-sizing: border-box; margin-bottom: 15px; border-radius: 10px; outline: none; transition: 0.2s; }
                                input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); }
                                .btn { cursor: pointer; border: none; background: var(--primary); color: white; padding: 10px 20px; font-weight: bold; border-radius: 8px; transition: 0.2s; }
                                .btn:hover { opacity: 0.9; transform: translateY(-1px); }
                                .item-card { background: var(--card); border: 1px solid var(--border); padding: 15px; margin-bottom: 10px; border-radius: 12px; display: flex; justify-content: space-between; align-items: center; transition: 0.2s; }
                                .item-card:hover { border-color: #cbd5e1; box-shadow: 0 2px 5px rgba(0,0,0,0.02); }
                                
                                /* Toast Notification */
                                #toast { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); background: #1e293b; color: white; padding: 12px 30px; display: none; border-radius: 30px; z-index: 1000; font-size: 14px; box-shadow: 0 5px 15px rgba(0,0,0,0.2); animation: slideUp 0.3s; }
                                @keyframes slideUp { from { bottom: -50px; opacity: 0; } to { bottom: 30px; opacity: 1; } }
                        
                                /* Modal Popup */
                                .modal { display: none; position: fixed; z-index: 1001; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); backdrop-filter: blur(4px); animation: fadeIn 0.3s; }
                                .modal-content { background-color: white; margin: 10% auto; padding: 30px; border-radius: 16px; width: 80%; max-width: 500px; box-shadow: 0 15px 35px rgba(0,0,0,0.1); position: relative; }
                                .close-modal { color: #aaa; float: left; font-size: 28px; font-weight: bold; cursor: pointer; margin-top: -10px; }
                                .close-modal:hover { color: var(--danger); }
                                .modal h2 { color: var(--primary); margin-top: 0; }
                                .modal ol { padding-right: 20px; line-height: 1.6; }
                                .modal li { margin-bottom: 10px; }
                                @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
                            </style>
                        </head>
                        <body>
                        
                            <div id="help-modal" class="modal">
                                <div class="modal-content">
                                    <span class="close-modal" id="close-help">&times;</span>
                                    <h2>איך משתמשים בכספת? 🛡️</h2>
                                    <p>ברוך הבא ל-Phantom Vault! הנה מדריך קצר:</p>
                                    <ol>
                                        <li><b>הוספת סיסמה:</b> מלא את שם האתר והסיסמה בשדות למעלה ולחץ על "שמור בכספת".</li>
                                        <li><b>העתקה בטוחה:</b> לחץ על "העתק" ליד סיסמה. היא תהיה זמינה להדבקה למשך 7 שניות בלבד, ואז הלוח ינוקה אוטומטית.</li>
                                        <li><b>מחיקה:</b> לחץ על ה-X האדום כדי למחוק רשומה לצמיתות (תצטרך לאשר את הפעולה).</li>
                                        <li><b>נעילה אוטומטית:</b> אם לא תיגע בעכבר במשך 3 דקות, הכספת תינעל מעצמה.</li>
                                    </ol>
                                    <button class="btn" style="width:100%; margin-top:15px;" id="got-it-btn">הבנתי, בוא נתחיל!</button>
                                </div>
                            </div>
                        
                            <div id="lock-screen" style="display:flex; min-height:100vh;">
                                <div class="vault-container" style="text-align:center;">
                                    <h2 style="color:var(--primary)">PHANTOM VAULT</h2>
                                    <input type="password" id="m-pass" placeholder="מפתח מאסטר" autofocus autocomplete="off">
                                    <button id="auth-btn" class="btn" style="width:100%">פתיחת הכספת</button>
                                </div>
                            </div>
                        
                            <div id="main-ui" style="display:none;">
                                <header>
                                    <span style="font-size: 13px; opacity: 0.7;">נעילה בעוד: <b id="timer">03:00</b></span>
                                    <button onclick="location.reload()" class="btn" style="background:var(--danger)">נעילה מיידית</button>
                                </header>
                        
                                <div class="vault-container" style="max-width: 100%; margin: 20px auto; padding: 20px;">
                                    <h3 style="margin-top:0;">הוספת סיסמה חדשה</h3>
                                    <div style="display:flex; gap:10px;">
                                        <input type="text" id="in-title" placeholder="שם האתר / שירות" style="margin-bottom:0;">
                                        <input type="password" id="in-val" placeholder="סיסמה" style="margin-bottom:0;">
                                    </div>
                                    <button id="save-btn" class="btn" style="width:100%; margin-top:15px; background:var(--success)">שמור בכספת מוצפנת</button>
                                </div>
                                
                                <div id="list" style="max-width:500px; margin:auto; padding-bottom: 50px;"></div>
                            </div>
                        
                            <div id="toast"></div>
                        
                            <script>
                                (function() {
                                    const DB_NAME = "Phantom_Final_RESET_V1"; 
                                    let db, activeKey, lastAct = Date.now();
                                    const enc = new TextEncoder(), dec = new TextDecoder();
                        
                                    const init = () => {
                                        const req = indexedDB.open(DB_NAME, 1);
                                        req.onsuccess = e => { db = e.target.result; };
                                    };
                        
                                    // פונקציית העתקה וניקוי
                                    function forceClipboard(text) {
                                        const textArea = document.createElement("textarea");
                                        textArea.value = text;
                                        textArea.style.position = "fixed"; textArea.style.left = "0"; textArea.style.top = "0"; textArea.style.opacity = "0.01";
                                        document.body.appendChild(textArea);
                                        textArea.focus(); textArea.select();
                                        try { document.execCommand('copy'); } catch (err) {}
                                        document.body.removeChild(textArea);
                                    }
                        
                                    const getK = async (p) => {
                                        const b = await crypto.subtle.importKey("raw", enc.encode(p), "PBKDF2", false, ["deriveKey"]);
                                        return crypto.subtle.deriveKey(
                                            { name: "PBKDF2", salt: enc.encode("fixed_salt_v12"), iterations: 100000, hash: "SHA-256" },
                                            b, { name: "AES-GCM", length: 256 }, false, ["encrypt", "decrypt"]
                                        );
                                    };
                        
                                    // כפתור פתיחה
                                    document.getElementById('auth-btn').onclick = async () => {
                                        const p = document.getElementById('m-pass').value;
                                        if(!p) return;
                                        activeKey = await getK(p);
                                        document.getElementById('lock-screen').style.display = 'none';
                                        document.getElementById('main-ui').style.display = 'block';
                                        render();
                                        startTimers();
                                        showHelpModal(); // הצגת המדריך בפעם הראשונה
                                    };
                        
                                    // כפתור שמירה
                                    document.getElementById('save-btn').onclick = async () => {
                                        const t = document.getElementById('in-title').value.trim(), v = document.getElementById('in-val').value;
                                        if(!t || !v) return;
                                        const iv = crypto.getRandomValues(new Uint8Array(12));
                                        const ct = await crypto.subtle.encrypt({name:"AES-GCM", iv}, activeKey, enc.encode(v));
                                        const tx = db.transaction("data", "readwrite");
                                        tx.objectStore("data").add({t, iv, ct});
                                        tx.oncomplete = () => {
                                            document.getElementById('in-title').value = ''; document.getElementById('in-val').value = '';
                                            showToast("הסיסמה נשמרה והוצפנה!"); render();
                                        };
                                    };
                        
                                    // רינדור הרשימה
                                    async function render() {
                                        const list = document.getElementById('list'); list.innerHTML = '';
                                        db.transaction("data").objectStore("data").getAll().onsuccess = e => {
                                            e.target.result.forEach(item => {
                                                const div = document.createElement('div'); div.className = 'item-card';
                                                div.innerHTML = `<b>${item.t}</b> 
                                                <div>
                                                    <button class="btn copy-btn" style="background:#eee; color:#333; margin-left:5px; padding: 5px 10px; font-size:13px;">העתק</button>
                                                    <button class="btn del-btn" style="background:transparent; color:red; border:1px solid red; padding:5px 10px; font-size:13px;">X</button>
                                                </div>`;
                                                
                                                // העתקה
                                                div.querySelector('.copy-btn').onclick = async () => {
                                                    const raw = await crypto.subtle.decrypt({name:"AES-GCM", iv:item.iv}, activeKey, item.ct);
                                                    const pass = dec.decode(raw);
                                                    forceClipboard(pass);
                                                    showToast("הסיסמה הועתקה! תימחק בעוד 7 שניות 🛡️");
                                                    setTimeout(() => {
                                                        forceClipboard("הלוח נוקה - Phantom Vault"); 
                                                        showToast("הלוח נוקה סופית.");
                                                    }, 7000);
                                                };
                        
                                                // מחיקה
                                                div.querySelector('.del-btn').onclick = () => {
                                                    if(confirm(`למחוק את ${item.t}?`)) {
                                                        db.transaction("data","readwrite").objectStore("data").delete(item.id).onsuccess = render;
                                                    }
                                                };
                                                list.appendChild(div);
                                            });
                                        };
                                    }
                        
                                    // פונקציות עזר
                                    function showToast(m) {
                                        const t = document.getElementById('toast'); t.textContent = m; t.style.display='block';
                                        setTimeout(() => t.style.display='none', 2800);
                                    }
                        
                                    function startTimers() {
                                        setInterval(() => {
                                            let d = 180000 - (Date.now() - lastAct);
                                            if(d <= 0) location.reload();
                                            document.getElementById('timer').textContent = new Date(d).toISOString().substr(14, 5);
                                        }, 1000);
                                        window.onmousemove = () => lastAct = Date.now();
                                        window.onkeydown = () => lastAct = Date.now();
                                    }
                        
                                    // פונקציות המודל (Pop-up)
                                    function showHelpModal() {
                                        document.getElementById('help-modal').style.display = 'block';
                                    }
                                    function hideHelpModal() {
                                        document.getElementById('help-modal').style.display = 'none';
                                    }
                                    document.getElementById('close-help').onclick = hideHelpModal;
                                    document.getElementById('got-it-btn').onclick = hideHelpModal;
                                    window.onclick = (e) => {
                                        if (e.target == document.getElementById('help-modal')) hideHelpModal();
                                    }
                        
                                    init();
                                })();
                            </script>
                        </body>
                        </html>
                        

                        פירוט על הקוד בספויילר:

                        הנה הסבר מפורט על המבנה, הפונקציות ומנגנוני ההגנה של הקוד בגרסה v13.5, המבוסס על הממשק שמוצג בתמונות שהעלית:

                        1. מבנה הממשק וחוויית המשתמש (UI/UX)
                          מסך נעילה (Lock Screen): זהו המחסום הראשון. המערכת דורשת "מפתח מאסטר" לפני שהיא חושפת את תוכן הכספת.

                        חלונית הדרכה (Help Modal): פונקציה חדשה שקופצת לאחר הכניסה ומסבירה למשתמש איך להוסיף, להעתיק ולמחוק סיסמאות.

                        לוח בקרה (Main UI): אזור עבודה נקי הכולל שדות להוספת אתר וסיסמה, ורשימה של כל הפריטים השמורים.

                        1. פונקציות הליבה (Core Functions)
                          init() - הקמת בסיס הנתונים: יוצרת בסיס נתונים מקומי בדפדפן בשם . המידע נשמר על המחשב שלך בלבד ולא נשלח לשום שרת חיצוני.Phantom_Final_RESET_V1

                        getK(p) - מחולל המפתחות: פונקציה זו לוקחת את מפתח המאסטר שהקשת והופכת אותו למפתח הצפנה מתמטי (AES-GCM) באמצעות אלגוריתם PBKDF2 עם 100,000 הרצות.

                        render() - הצגת הרשימה: מושכת את כל הסיסמאות המוצפנות מבסיס הנתונים, מפענחת אותן (רק בזמן אמת בזיכרון) ומציגה אותן בתוך כרטיסיות עם כפתורי פעולה.

                        forceClipboard(text) - העתקה "חסינה": כדי לעקוף חסימות אבטחה של דפדפנים בהרצה מקומית, הפונקציה יוצרת שדה טקסט זמני ונסתר, מבצעת בחירה (Select) והעתקה (Copy).

                        1. מנגנוני הגנה ואבטחה (Protection Layers)
                          הצפנה מקצה לקצה: כל סיסמה שאתה שומר עוברת הצפנה בשיטת AES-GCM. גם אם מישהו יצליח לפתוח את הקובץ ללא המפתח, הוא יראה רק אוסף תווים חסרי משמעות.

                        ניקוי לוח אוטומטי (7 שניות): לאחר העתקת סיסמה, המערכת ממתינה 7 שניות ומבצעת העתקה של המשפט "הלוח נוקה - Phantom Vault". פעולה זו "דורסת" את הסיסמה מהלוח הנוכחי כדי שלא תודבק בטעות במקום אחר.

                        הגנה מפני היסטוריית לוח: כפי שראינו בתיעוד הלוח של Windows (), הפעולה של הקוד מוסיפה שורה חדשה של "הלוח נוקה", מה שמוריד את הסיסמה שלב אחד למטה בהיסטוריה.Win+V

                        טיימר נעילה (3 דקות): הקוד מנטר תנועות עכבר והקלדה. אם אין פעילות במשך 180 שניות, הדף מתרענן והכספת ננעלת אוטומטית.

                        מניעת בחירת טקסט: הקוד כולל הגדרת CSS () שמונעת מהמשתמש לסמן ולהעתיק בטעות טקסטים מהממשק עצמו שלא דרך כפתור ההעתקה המבוקר.user-select: none

                        1. כלי ניהול
                          כפתור מחיקה (X): מאפשר הסרת רשומות מבסיס הנתונים. המערכת מבקשת אישור (Confirm) לפני המחיקה כדי למנוע טעויות.

                        התראות (Toasts): הודעות קופצות בתחתית המסך שמעדכנות על הצלחת השמירה, ההעתקה או ניקוי הלוח.

                        פירוט על צורת העבודה של הקוד:

                        1. ניהול נתונים והצפנה (הלב של הכספת)
                        בסיס נתונים מקומי (IndexedDB): כל המידע נשמר אך ורק על המחשב שלך בתוך הדפדפן. שום דבר לא נשלח לאינטרנט, מה שמבטיח פרטיות מוחלטת.

                        אלגוריתם AES-GCM: זוהי רמת הצפנה צבאית. גם אם מישהו יצליח לגשת לקובץ הנתונים ללא מפתח המאסטר שלך, הוא יראה רק רצף תווים אקראי ובלתי קריא.

                        מפתח PBKDF2: הקוד לוקח את הסיסמה שאתה מקליד ומריץ אותה 100,000 פעמים דרך נוסחה מתמטית כדי ליצור מפתח הצפנה חזק במיוחד, מה שמקשה מאוד על ניסיונות פריצה.

                        1. מנגנוני העתקה וניקוי (פתרון הבעיות)
                          פונקציית forceClipboard: זו הפונקציה שפיתחנו כדי לעקוף את חסימות הדפדפן שראינו בתמונות שלך. היא יוצרת שדה טקסט נסתר לרגע, מעתיקה ממנו, ואז נמחקת.

                        השמדה עצמית (7 שניות): לאחר העתקת סיסמה, המערכת מפעילה טיימר. בסיום 7 השניות, היא מעתיקה באופן אוטומטי את המשפט "הלוח נוקה - Phantom Vault".

                        התמודדות עם היסטוריית הלוח: כפי שראינו בצילום המסך של , ווינדוס שומרת היסטוריה. פעולת הניקוי האוטומטית דוחפת את הסיסמה שלך שלב אחד למטה בהיסטוריה ומחליפה את הלוח ה"פעיל" בטקסט חסר משמעות.Win+V

                        1. שכבות הגנה אקטיביות
                          נעילה אוטומטית (Timeout): בחלק העליון מופיע טיימר של 3 דקות. אם לא הזזת את העכבר, המערכת מניחה שעזבת את המחשב ונועלת את הכספת אוטומטית כדי שאף אחד לא יראה את התוכן.

                        הודעות "Toast": בכל פעם שמתבצעת פעולה (שמירה, העתקה או ניקוי), קופצת הודעה קטנה בתחתית המסך כדי לאשר לך שהפעולה הצליחה.

                        חסימת סימון טקסט: הקוד מונע ממך (או ממישהו אחר) לסמן טקסטים מהממשק עם העכבר, כדי למנוע העתקה לא מבוקרת של מידע מהמסך.

                        1. ממשק המשתמש החדש
                          מדריך למשתמש (Popup): הוספנו חלונית הסבר שקופצת מיד לאחר הכניסה. היא מסבירה בצורה פשוטה איך להשתמש במערכת (הוספה, העתקה ומחיקה).

                        כפתור מחיקה (X): מאפשר לך לנקות רשומות ישנות בקלות. המערכת מבקשת אישור לפני המחיקה כדי למנוע טעויות בלתי הפיכות.

                        כפתור נעילה מיידית: נמצא תמיד בראש הדף ומאפשר לך לסגור הכל בשנייה אחת אם מישהו נכנס לחדר.

                        מתכנת חובבמ מנותק
                        מתכנת חובבמ מנותק
                        מתכנת חובב
                        מדריכים
                        כתב נערך לאחרונה על ידי מתכנת חובב
                        #35

                        @יאיר-דניאל ההצפנה של הסיסמאות עצמן בסדר אבל ההמלחה קבועה בקוד והוא שומר את שמות האתרים כ plain text
                        @cfopuser מה הקשר ל STO? יש פה הצפנה אמיתית על הסיסמאות (גם אם מסך ההתחברות תלוי סך הכל בהגדרת CSS
                        *לא בדקתי את התוכנה עצמה - רק את הקוד מלמעלה

                        צריך עזרה בשחזור מידע? ייעוץ? egozkokus1@gmail.com

                        א cfopuserC ה 3 תגובות תגובה אחרונה
                        1
                        • מתכנת חובבמ מתכנת חובב

                          @יאיר-דניאל ההצפנה של הסיסמאות עצמן בסדר אבל ההמלחה קבועה בקוד והוא שומר את שמות האתרים כ plain text
                          @cfopuser מה הקשר ל STO? יש פה הצפנה אמיתית על הסיסמאות (גם אם מסך ההתחברות תלוי סך הכל בהגדרת CSS
                          *לא בדקתי את התוכנה עצמה - רק את הקוד מלמעלה

                          א מחובר
                          א מחובר
                          אהל יהודה
                          כתב נערך לאחרונה על ידי
                          #36

                          @מתכנת-חובב תודה רבה.
                          אתה חושב שבאמת יש סיכון שמישהו יפרוץ למחשב ויקח את הקודים?

                          cfopuserC מתכנת חובבמ 2 תגובות תגובה אחרונה
                          0
                          • מתכנת חובבמ מתכנת חובב

                            @יאיר-דניאל ההצפנה של הסיסמאות עצמן בסדר אבל ההמלחה קבועה בקוד והוא שומר את שמות האתרים כ plain text
                            @cfopuser מה הקשר ל STO? יש פה הצפנה אמיתית על הסיסמאות (גם אם מסך ההתחברות תלוי סך הכל בהגדרת CSS
                            *לא בדקתי את התוכנה עצמה - רק את הקוד מלמעלה

                            cfopuserC מנותק
                            cfopuserC מנותק
                            cfopuser
                            כתב נערך לאחרונה על ידי
                            #37

                            @יאיר-דניאל כתב בלהורדה | דבר קטן וחמוד - שומר סיסמאות אופלין:

                            מה לא מובן - זה קובץ אופליין - ששומר את הסיסמאות שלך - במקום לשמור אותם בקובץ אקסל.
                            ומי ישמע "סומך על AI" - מה זה קשור לקוד שהיא כתבה,היא כתבה את הקוד "לתוכנה" הזו, וילד בן 12 עם ידע במחשבים, פורץ את הסיסמה, אבל לא הבנת את הרעיון - זה לא נועד לאקרים ולא לאף אחד שקצת דומה לזה, זה נועד לאנשים פשוטים שרוצים את הקודים שלהם זמינים גם באופליין - לדוגמא משתמשי חדרי מחשבים. והסיסמה היא בשביל שאיזה חבר סקרן לא יכנס ויראה מה הסיסמאות שלך.

                            (אגב, גם אם אקר יפרוץ למחשב שלך - כל עוד תקרא לקובץ HTML הזה "בדיני מים אחרונים והמתסעף" בתוך תיקייה "בלימוד", מה האחוזים שהוא ינסה לבדוק מה כתבת בסוגיא הזו?...)

                            התייחסתי לכול הנקודה הזאת.

                            תגובה 1 תגובה אחרונה
                            0
                            • א אהל יהודה

                              @מתכנת-חובב תודה רבה.
                              אתה חושב שבאמת יש סיכון שמישהו יפרוץ למחשב ויקח את הקודים?

                              cfopuserC מנותק
                              cfopuserC מנותק
                              cfopuser
                              כתב נערך לאחרונה על ידי cfopuser
                              #38

                              @אהל-יהודה אף וירוס קלאסי (של רסס ופגע) לא מהווה לדעתי את האיום העיקרי,
                              הסיכון יכול יותר לבוא ממישהו שמשיג גישה פיזית למחשב כמה מידע הוא יכול לחלץ מהמכשיר.

                              תגובה 1 תגובה אחרונה
                              0
                              • מתכנת חובבמ מתכנת חובב

                                @יאיר-דניאל ההצפנה של הסיסמאות עצמן בסדר אבל ההמלחה קבועה בקוד והוא שומר את שמות האתרים כ plain text
                                @cfopuser מה הקשר ל STO? יש פה הצפנה אמיתית על הסיסמאות (גם אם מסך ההתחברות תלוי סך הכל בהגדרת CSS
                                *לא בדקתי את התוכנה עצמה - רק את הקוד מלמעלה

                                ה מנותק
                                ה מנותק
                                המלאך
                                כתב נערך לאחרונה על ידי המלאך
                                #39

                                @מתכנת-חובב @cfopuser ואין חשש שמישהו יזריק תוכנה זדונית כשהמחשב כן יהיה מחובר לרשת.
                                וזה ינסה לגנוב מידע גם מהתכונה הזו באמצעים שהזכרתי לעיל?
                                יותר נכון לשאול - זה לא קלאסי - כניסה על ידי ראם או על ידי גניבת הסיסמת גישה למנהל?

                                תגובה 1 תגובה אחרונה
                                0
                                • א אהל יהודה

                                  @מתכנת-חובב תודה רבה.
                                  אתה חושב שבאמת יש סיכון שמישהו יפרוץ למחשב ויקח את הקודים?

                                  מתכנת חובבמ מנותק
                                  מתכנת חובבמ מנותק
                                  מתכנת חובב
                                  מדריכים
                                  כתב נערך לאחרונה על ידי
                                  #40

                                  @אהל-יהודה אם מישהו ינסה ספציפית לפצח את הסיסמאות ויש לו כרטיס מסך טוב וגם את הקוד המקורי הוא כנראה יצליח

                                  @cfopuser כתב בלהורדה | דבר קטן וחמוד - שומר סיסמאות אופלין:

                                  התייחסתי לכול הנקודה הזאת.

                                  לא שמתי לב
                                  בכל אופן מה שהוא כתב שם מיותר כלפי התוכנה עצמה

                                  @המלאך כתב בלהורדה | דבר קטן וחמוד - שומר סיסמאות אופלין:

                                  כניסה על ידי ראם או על ידי גניבת הסיסמת גישה למנהל?

                                  קצת לא מובן למה התכוונת בכניסה על ידי ראם
                                  אולי לסריקה של הזיכרון כשהסיסמאות כבר מפוענחות - יכול להיות שמנגנון האחסון של כרום כבר דואג לאבטחה על זה
                                  אבל זה דיון קצת עקר - מי שרוצה להשתמש בכלי נורמלי ישתמש במנהל סיסמאות מוכר ומי שרוצה פשטות שיקח את מה שיש פה או יבנה בעצמו
                                  אין פה בכל אופן סיכון משמעותי שיבוא לידי מימוש

                                  צריך עזרה בשחזור מידע? ייעוץ? egozkokus1@gmail.com

                                  תגובה 1 תגובה אחרונה
                                  1

                                  • התחברות

                                  • אין לך חשבון עדיין? הרשמה

                                  • התחברו או הירשמו כדי לחפש.
                                  • פוסט ראשון
                                    פוסט אחרון
                                  0
                                  • חוקי הפורום
                                  • פופולרי
                                  • לא נפתר
                                  • משתמשים
                                  • חיפוש גוגל בפורום
                                  • צור קשר