QWERTY Klavye için anımsatıcı Şifre Nesil Algoritma

7 Cevap php

Ben böyle bir şey gider bir "mnemonic "şifre oluşturma fonksiyonu var:

function Mnemonic($mnemonic)
{
    $result = null;
    $charset = array(str_split('aeiou', 1), str_split('bcdfghjklmnpqrstvwxyz', 1));

    for ($i = 1; $i <= $mnemonic; $i++)
    {
        $result .= $charset[$i % 2][array_rand($charset[$i % 2])];
    }

    return $result;
}

Temelde bu her bir tek karakter bir ünsüz ve her hatta karakter bir sesli harf olan $mnemonic uzunluğunda bir dize oluşturur. Bu genellikle çok daha bulunuyor parola karmaşıklığını azaltan anlamak ise easier to remember. Şimdi olan dizeleri üreterek bunu geliştirmek istiyorum easy to type.

QWERTY Klavye Layout

Ben her zaman Debian olanlar üzerinde RHEL tabanlı dağıtımlar tercih * nix acemi, ana nedeni yum yazarak kolaylığı karşı yazarak kolaylığı ise Örneğin, apt[-get], sadece için deneyin Kendinizi.

Nasıl klavye QWERTY yazmak için kolay dizeleri üretmek için mantık uygulamak gerekir?

7 Cevap

Sen, principles used in the Dvorak keyboard bakmak isteyebilirsin

Bir parola üreten algoritma uygulanan bu ilkeler olacaktır:

  • Mektuplar el değiştirerek yazılmalıdır.
  • Kombinasyonları yazımı kolay kullanın. Dvorak düzeni bir göz atın ve ortak digraphs ve harflerin pozisyonları görmek.
  • Sadece bir alt satır mektup, ya da değil kullanın. Rastgele olun!
  • Sen oranını yapabilirsiniz 2 (sol elle yazdığınız 1 harfine sağ elle yazdığınız 2 harf) 1.
  • Oranı 2'ye 1 olduğundan, bunu yapacaksın onlar içine klavye dışından yazıldığında emin olmak zorundasın aynı el tarafından yazılmış 2 ardışık harf geçireceğiz. Bu ilke digraphs uygulanır.

Ben bunu bir QWERTY klavye bulunuyor ama bir QWERTY klavye bu ilkeleri kullanarak size gibi bazı çok iyi sonuçlar verebilir dedi biliyorum:

ktrd, ogkdo (Dvorak "daktilo")

KJG, g; akd, (ev satır sadece kullanmadan) k

pjedoildupsk (aşağıdaki esaslar sadece rastgele bir şifre)

Tüm Dvorak nefret edenler, onu sus!

Bu yardımcı olur umarım.

Carpalx içermektedir ki, typing effort hesaplanması üzerinde çok araştırma vardır:

  • parmak seyahat mesafesi
  • El, parmak ve satır cezalar
  • inme yolu

Onların araştırma sonucu claims to be better than Dvorak Colemak klavye düzeni vardır.

Ancak, ne istediğinizi geriye doğru yazılmıştır - onların hedefi girişine göre daha iyi bir klavye düzeni bulmak için, ama sen klavye düzeni dayalı kolay giriş bulmaya çalışıyoruz.

Yani - doğrudan kullanmak mümkün olmayabilir bile, seni bulmak düşündüm ilginç (ve kim Perl-fu güçlü ise o ({[beri, sen algoritma ayıklamak ve tersine çevirmek mümkün olabilir, bilir 0)]}).

Bu harfler arasındaki sol ve sağ elinde ve alternatif tarafından yazıldığında karakterleri tükürmek sonra, halka ve serçe parmak (q, w, x, z, p) ile yazdığınız tüm karakterler ortadan kaldırabilir.

Belki 'yazarak kolaylığı' ölçmek için bazı sezgisel kullanabilirsiniz.

Örneğin, bir sonraki karaktere giderken bir parmak hareket maliyetini düşünün. Bu parmak, hangi yönde vb taşımak gerekiyor ne kadar bir fonksiyonu olabilir

Ayrıca ekstra o parmaklarını geçmek için gerekli olan maliyetleri, ya da eller ekleyebilirsiniz.

Maliyetleri ile etrafında biraz oynadıktan sonra, muhtemelen tatmin edici bir çözüm üzerine vuracaktır.

Umut olur.

Büyük soru - yukarıdaki önerileri alarak, burada ben j girmek için anahtarı mesafe için bir formülleri var:

Ağırlık = mesafe * a + b + geçiş * aynı * c + shift * d + garip * E + * f Başlat

Mesafe diğerleri 0/1 değerleri, bir değerdir.

Distance - get by superimposing a fine grid over a QWERTY keyboard, lookup the x,y and calculate the distance. Distance has a positive weight. If the letter combination is with the use of different hands (e.g aj, sk, wu...), the distance is zero.

Anahtarı - negatif ağırlık; anahtarlama iyidir

Same - aq, qa, az, za aynı parmağınızı kullanın. Aynı pozitiftir

Shift - kayması ile olumlu bir şey olduğunu ve gerçek kötü

Garip - Ben $ Bilmiyorum veya klavye bakmak zorunda çünkü ~ kötü.

Start - başlangıç ​​veya bitiş asdfjkl. Muhtemelen negatif & iyi parmaklarınızı istirahat vardır çünkü.

Coefficients - just make 'em up to start as long as the relative values seem reasonable. If you REALLY want to get fancy - get someone to type in several dozen sets of numbers, use a stop watch and fit a regression model.

Uygulama - Biz altı karakter şifre var söylüyorlar.

Şimdi her harf ile başlayan altı karakterler için en düşük değer gerekir. Bir sütun içinde N tuşları bir dizi düşünün. Şimdi altı sütun düşünün. Sizin kısa şifre (izin döngüleri ile) altı sütun üzerinden kısa yoldur. Sen döngüleri ortadan kaldırmak için bazı mantık eklemek gerekebilir, ama bu iyi bir ilk geçiş olmalıdır. (Ben burada tembel alıyorum - Bu sorunu işleyen bir grafik teorik formülasyonu muhtemelen var.)

Özellikle tuş bölümü - Birisi önce yapmış bahse girerim.

Bir klavye ve kodları her karakteri yazmak için kullanılan satır, sütun, el ve parmak temsil eden bir veri yapısı oluşturmak. Bir karakteri ile sunulduğunda, geliştirmek esnek kurallara dayalı "kolay sonraki yazın" karakterlerinin bir listesini sağlar, bir fonksiyon yazın. Bu tuşlar arasındaki mesafeyi hesaplayan başka bir işlev güveniyor olabilir.

Şahsen, ben iki kere yavaş olması aynı elle harfleri yazarak bulmuyorum: Bir önceki yazmak çok yakın bir parmak kullanıldığında yalnızca zordur. Örneğin, XQ elim bunları yazmak için gerekli bitişik parmak işlemek için yukarı taşımak için vardır, çünkü yazın zordur. Benim işaret parmağı hala B üzerinde çalışırken, benim serçe parmak Q için baş edebilirsiniz çünkü Ama, bütün yazın zor BQ bulmuyorum

Yüzük parmağı daha uzun ve böylece doğal QS pinkie bir streç ve eşzamanlı gerektirir süre serçe, yakın bir dinlenme pozisyonunda, A ise W uyar çünkü, aynı zamanda QS daha AW yazmanız çok daha kolay yüzük parmağının çelişkili kas krizi.

Eğer birbirlerine mektupla karşı her harfin bir harita oluşturmak için başlarsanız, yakında kolaylığı ya da zorluk çeşitli yönlerini temsil etmek makul bir yol bulacaktır. Benim XQ / BQ örnek genelleme, bir satır değişiklikleri 2 veya daha fazla parmak bir mesafe gerektiren yapabilir, 2-satır değişiklikler 3 parmak bir mesafe gerektiren, ve 3-satır değişiklikleri (sayılar, belki de) alternatif eller gerektirir.

Ben de SE ve KO daha WD ve IL arasında biraz daha uzun mesafe de çünkü tuşların biraz sivri yerleştirme, zorluk değiştirir olduğunu fark ediyorum.

Bazı analizi ile (I yazarak zorluk "haritasını" Excel kullanarak tavsiye) Ben size kolay-tip kelimeleri inşa yardımcı olan bir algoritma ile gelip eminim.

Eğer mümkünse, en az bir sayı atarak deneyin, ve de boşluk kullanmayı düşünün.

Bu uygulamaya, başka bir karakter hareket "maliyeti" tespit ederken, dikkate kullanıcının yerel atın lütfen. Kullanıcı farklı bir klavye düzeni kullanarak eğer bir kolay-tipi şifre oldukça hantal hale gelebilir. Bir dilin klavye üzerinde erişmek kolay olabilir bazı tuşlar ekstra değiştirici tuşları (shift, meta, vb) gerekmeden başka dilin klavye mevcut olmayabilir.

Evrensel Bu fikri tutmak için, ben karakter ne tuşu yerine satırlar ve sütunlar ile bir dizi olarak tuşları tedavi ait olanı görmezden öneriyoruz. Her satır, genellikle kabaca 1/3 anahtar genişliği ile önceki mahsup edilir. Bu düşünceyle, herhangi iki rasgele tuşlar arasındaki mesafe hesaplamak için zor olmamalı:

# Key at top left corner is {0, 0}
key1 @ {x1, y1}
key2 @ {x2, y2}

xdistance = absolute_value(x2 - x1)
ydistance = absolute_value(y2 - y1)

if y1 > y2
  xdistance += (1/3 * ydistance)
else
  xdistance -= (1/3 * ydistance)

total_distance = square_root(xdistance^2 + ydistance^2)

Karakterleri içine bu endeksleri yeniden eşleştirmek için kullanıcının geçerli keymap kullanın, sonra uzunluk ve gereksinimleri "yazarak kolaylığı" toplantı kilit pozisyonların bir dizi oluşturun.