{"id":62,"date":"2014-03-07T11:35:46","date_gmt":"2014-03-07T09:35:46","guid":{"rendered":"https:\/\/moijari.com\/?p=62"},"modified":"2019-11-22T17:02:23","modified_gmt":"2019-11-22T15:02:23","slug":"62","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=62","title":{"rendered":"Terttu jatkuu"},"content":{"rendered":"<p>Olen viel\u00e4 jatkanut tertun koodaamista, olen tehnyt seuraavia muutoksia:<\/p>\n<p>Lis\u00e4tty html parametrien k\u00e4sittely. Lis\u00e4tty koodia session id:lle, lis\u00e4tty reset, fetch, prev ja next nappulat. Lis\u00e4tty otsakkeen kenttien perusteella haku fetch nappulalla. Lis\u00e4tty save nappula, se ei viel\u00e4 toimi. Lis\u00e4tty yksinkertaiset session muuttujat. Lis\u00e4tty koodi prev ja next nappuloille. Korjattu pikku bugi css tekstin l\u00e4hetyksest\u00e4.<\/p>\n<p>Lopun koodip\u00e4tkiss\u00e4 session id:n antamiseen tarvittavat rutiinit, eli session id:n muodostus ja satunnaisbittigeneraattori(genbytes). Satunnaisbittigeneraattori ei ole kai ole kovin hyv\u00e4 sellaisenaan, koska se perustuu suoraan kelloon, mutta siit\u00e4 saa kohtuullisen l\u00e4hteen satunnaisbittigeneraattorille.<\/p>\n<p>Edit: Katsoin uudestaan tuota istunnon avaimen generointirutiinia, ja huomasin ett\u00e4 se ei k\u00e4yt\u00e4 mit\u00e4\u00e4n muuta kuin genbyte:i\u00e4 istunnon avaimen generointiin. Siksi lis\u00e4sin tuon linuxin satunnaislukugeneraattorin yhdeksi l\u00e4hteeksi. Tein muutaman genbyte testiohjelman, ja kuten edellisess\u00e4 kappaleessa kerroinkin, genbytes ei sellaisenaan riit\u00e4 (kokeile generoida istuntoavaimia pelk\u00e4ll\u00e4 genbytell\u00e4 siten, ett\u00e4 aloitat generaattorin aina samasta kellonajasta)&#8230; En onnistunut ohjeideni mukaan l\u00f6yt\u00e4m\u00e4\u00e4n uudestaan samoja generoituja avaimia. T\u00e4m\u00e4 editti taitaa olla ankka. Hups! Generaattori perustuu vaihteluihin, joita l\u00f6ytyy luettaessa kelloa toistuvasti. Jokainen luettu bitti vaikuttaa ~kaikkiin syntyv\u00e4n satunnaisluvun bitteihin(f), Omissa testeiss\u00e4ni vaihtelu riitti, mutta j\u00e4tt\u00e4isin kuitenkin tuon linuxin satunnaislukugeneraattori rivin.<\/p>\n<p>Kaikki oikeudet tietenkin pid\u00e4tet\u00e4\u00e4n.<\/p>\n<p>Viimeinen versio ohjelmasta l\u00f6ytyy seuraavasta linkist\u00e4: <a href=\"https:\/\/moijari.com:5002\">moijari.com:5002<\/a><\/p>\n<pre>#define SESSIONIDLEN 24 \/* 6*24=144 riitt\u00e4v\u00e4? *\/\r\n#define SESSIONIDRAW 18\r\n\r\nunsigned char sessionid[SESSIONIDLEN+1]=\"\";\r\n\r\nchar sessiondigits[] = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-\";\r\n\r\nvoid get_session_id(unsigned char *id)\r\n{\r\n int c;\r\n int slen=strlen(sessiondigits);\r\n unsigned char d,buffer[SESSIONIDRAW],*i;<\/pre>\n<pre> urandom_xor(sizeof(buffer),buffer);\r\n\u00a0genbytes(sizeof(buffer),buffer,20);\r\n#ifdef USE_RANDOM_GEN\r\n \/* Read Schneier: Applied Cryptography, second edition, p 426 distilling randomness *\/\r\n random_gen_xor(sizeof(buffer),buffer);\r\n#endif\r\n\r\n#ifdef USE_FORT_RANDOM_DATA\r\n \/* Read Schneier: Fortuna (PRNG) *\/\r\n fort_random_data_xor(sizeof(buffer),buffer);\r\n#endif\r\n\r\n for(i=id,c=0;c&lt;SESSIONIDRAW;c+=3) {\r\n   d=(buffer[c]&amp;0xfc)&gt;&gt;2;\r\n   *i++=sessiondigits[d];\r\n   d=((buffer[c]&amp;0x03) &lt;&lt; 4)| (buffer[c+1]&amp;0xf0)&gt;&gt;4;\r\n   *i++=sessiondigits[d];\r\n   d=((buffer[c+1]&amp;0x0f) &lt;&lt; 2)| (buffer[c+2]&amp;0xc0)&gt;&gt;6;\r\n   *i++=sessiondigits[d];\r\n   d=(buffer[c+2]&amp;0x3f);\r\n   *i++=sessiondigits[d];\r\n }\r\n\r\n *i='\\0';\r\n\r\n fprintf(stdout,\"sessionid: %sn\",id);\r\n fflush(stdout);\r\n}\r\n\r\n#include &lt;sys\/time.h&gt;\r\n\r\nlong genbyte()\r\n{\r\n int byte;\r\n struct timeval tv;\r\n\r\n gettimeofday(&amp;tv,NULL);\r\n\r\n byte=\r\n   (tv.tv_usec&amp;0xff)^\r\n   ((tv.tv_usec&gt;&gt;8)&amp;0xff)^\r\n   ((tv.tv_usec&gt;&gt;16)&amp;0xff)^\r\n   ((tv.tv_usec&gt;&gt;24)&amp;0xff)^\r\n   (tv.tv_sec&amp;0xff)^\r\n   ((tv.tv_sec&gt;&gt;8)&amp;0xff)^\r\n   ((tv.tv_sec&gt;&gt;16)&amp;0xff)^\r\n   ((tv.tv_sec&gt;&gt;24)&amp;0xff);\r\n return(byte);\r\n}\r\n\r\ngenbytes(int size,unsigned char *buffer,int b)\r\n{\r\n int c,d,e,f;\r\n long u;\r\n unsigned char byte;\r\n struct timeval tv;\r\n\r\n f=0;\r\n for(c=0;c&lt;8*b;c++) {\r\n   for(d=0;d&lt;size;d++) {\r\n     u=genbyte();\r\n     e=buffer[d];\r\n     e=((e&amp;0x80)&gt;&gt;7) | ((e&amp;0x7f)&lt;&lt;1);\r\n     e=e^u;\r\n     buffer[d]=e;\r\n   }\r\n   for(d=0;d&lt;size;d++) { \/* see rc4 *\/\r\n     f=(f+buffer[d])%size;\r\n     e=buffer[d];\r\n     buffer[d]=buffer[f];\r\n     buffer[f]=e;\r\n   }\r\n }\r\n}\r\n\r\nvoid urandom_xor(int len2,unsigned char *buf2) {\r\n  int n,c,len;\r\n  unsigned char buffer2[32],*buf;\r\n\r\n  FILE *fp1;\r\n  fp1=fopen(\"\/dev\/urandom\",\"rb\");\r\n  if(fp1!=NULL) {\r\n    len=len2;\r\n    buf=buf2;\r\n    while(len!=0) {\r\n      n=(len&lt;32) ? len : 32;\r\n      fread(buffer2,1,n,fp1);\r\n      for(c=0;c&lt;n;c++)\r\n        buf[c]^=buffer2[c];\r\n      len-=n;\r\n      buf+=n;\r\n    }\r\n     fclose(fp1);\r\n  }\r\n}\r\n\r\nint htmlevent(int news,char *sovellus) {\r\n \/* ... *\/\r\n if(sessionid[0]=='\ufffd'\r\n   get_session_id(sessionid);\r\n \/* ... *\/\r\n}<\/pre>\n<p><!-- PRE { font-family: \"Liberation Serif\",serif; }P { margin-bottom: 0.21cm; } --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Olen viel\u00e4 jatkanut tertun koodaamista, olen tehnyt seuraavia muutoksia: Lis\u00e4tty html parametrien k\u00e4sittely. Lis\u00e4tty koodia session id:lle, lis\u00e4tty reset, fetch, prev ja next nappulat. Lis\u00e4tty otsakkeen kenttien perusteella haku fetch nappulalla. Lis\u00e4tty save nappula, se ei viel\u00e4 toimi. Lis\u00e4tty yksinkertaiset session muuttujat. Lis\u00e4tty koodi prev ja next nappuloille. Korjattu pikku bugi css tekstin l\u00e4hetyksest\u00e4. Lopun&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=62\">Continue reading <span class=\"screen-reader-text\">Terttu jatkuu<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[6,5],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/62"}],"collection":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=62"}],"version-history":[{"count":64,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/62\/revisions"}],"predecessor-version":[{"id":2063,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/62\/revisions\/2063"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}