{"id":1472,"date":"2020-12-07T15:11:51","date_gmt":"2020-12-07T13:11:51","guid":{"rendered":"https:\/\/moijari.com\/?p=1472"},"modified":"2020-12-11T23:18:55","modified_gmt":"2020-12-11T21:18:55","slug":"hashaamalla-satunnaisuutta-http-ja-https-sivuista","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=1472","title":{"rendered":"Hash:\u00e4\u00e4m\u00e4ll\u00e4 satunnaisuutta HTTP ja HTTPS sivuista"},"content":{"rendered":"\n<p>Aluksi pari apuohjelmaa, joilla luodaan yhteys ja tulostetaan merkkijonoja:<\/p>\n\n\n\n<p>Edit: Kun k\u00e4yt\u00e4t satunnaisuutta jostain l\u00e4hteest\u00e4, \u00e4l\u00e4 k\u00e4yt\u00e4 sit\u00e4 suoraan vaan lis\u00e4\u00e4 se muihin l\u00e4hteisiin (esim hash funktiolla) , ja muodosta tuloksesta satunnaisbittej\u00e4. K\u00e4yt\u00e4 n\u00e4it\u00e4 vain sivuihin, joiden k\u00e4ytt\u00f6\u00f6n sinulla on lupa ja harvoin, sill\u00e4 vaarana on palvelunesto. Muista noudattaa s\u00e4\u00e4nt\u00f6j\u00e4 ja lakeja.<\/p>\n\n\n\n<p>Nyt my\u00f6s https satunnaisbittisivu (<a href=\"https:\/\/moijari.com:5005\">https:\/\/moijari.com:5005<\/a>)on verkossa.<\/p>\n\n\n\n<p>End of edit.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#ifdef FORT_USE_MOIJARICOM\n\n#include &lt;sys\/types.h&gt;\n#include &lt;sys\/socket.h&gt;\n#include &lt;netdb.h&gt;\n#include &lt;sys\/types.h&gt;\n#include &lt;sys\/socket.h&gt;\n\nint fort_connect(unsigned char *host, unsigned char *port)\n{\n  struct addrinfo hints, *res, *resp;\n  int s, status;\n\n  memset(&amp;hints, 0, sizeof(hints));\n  hints.ai_family = AF_UNSPEC;\n  hints.ai_socktype = SOCK_STREAM;\n  hints.ai_flags = AI_PASSIVE;\n\n  if((status = getaddrinfo(host, port, &amp;hints, &amp;res)) != 0) {\n    fprintf(stderr,\"\\n%s: getaddrinfo\", procname);\n    fprintf(stderr,\", status %d\", status);\n    fprintf(stderr,\", gai_strerror(): %s\", gai_strerror(status));\n    fprintf(stderr,\", errno %d\\n\", errno);\n    fflush(stderr);\n  }\n\n  for(resp=res; resp!=NULL; resp = resp-&gt;ai_next) {\n    if((s = socket(resp-&gt;ai_family, resp-&gt;ai_socktype, resp-&gt;ai_protocol))&lt;0)\n      continue;\n    if(connect(s, resp-&gt;ai_addr, resp-&gt;ai_addrlen) == 0)\n      break;\n    close(s);\n  }\n\n  freeaddrinfo(res);\n\n  return(s);\n}\n\n#include &lt;stdarg.h&gt;\n\nvoid dbs_printf(unsigned char **buf, int *buf_length, const char *format, ...)\n{\n  int count;\n  va_list args;\n\n  va_start(args, format);\n  count = snprintf(*buf, *buf_length, format, args) + 1;\n  va_end(args);\n  if(*buf_length &lt; count) {\n    *buf_length = count;\n    *buf = realloc(*buf, *buf_length);\n    va_start(args, format);\n    count = snprintf(*buf, *buf_length, format, args) + 1;\n    va_end(args);\n  }\n}\n\n<\/code><\/pre>\n\n\n\n<p>Seuraavana satunnaisuuden lukemisrutiini http-sivuille:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void fort_hash_http_page(unsigned char *host,unsigned char *port, unsigned char *page, unsigned char *hash)\n{\n  int s,status,bytes,total;\n\n  if((s = fort_connect(host, port))&lt;0) {\n    fprintf(stderr,\"\\n%s: cannot fort_connect()\", procname);\n    fprintf(stderr,\", status: %d\", status);\n    fprintf(stderr,\", errno: %d\" , errno);\n    perror(\"fort_connect\");\n    fflush(stderr);\n  }\n\n  unsigned char *format =\n    \"GET %s HTTP\/1.0\\r\\n\"\n    \"Host: %s\\r\\n\";\n  static unsigned char *msg = NULL;\n  static int msg_length=0;\n\n  dbs_printf(&amp;msg, &amp;msg_length, format, page, host);\n\n  if((status=write(s, msg, strlen(msg)))&lt;0) {\n    fprintf(stderr, \"\\n%s: write(), error: %d\\n\", procname, errno);\n    perror(\"write\");\n    fflush(stderr);\n  }\n\n  HashCtx ctx;\n  char buffer&#91;1024];\n\n  HashInit(&amp;ctx);\n  total=0;\n  while((bytes = read(s, buffer, sizeof(buffer)))&gt;0) {\n    \/\/write(1,buffer,bytes);\n    HashUpdate(&amp;ctx, buffer, bytes);\n    total+=bytes;\n  }\n\n  HashFinal(hash, &amp;ctx);\n\n  fprintf(stdout,\"fort_hash_http_page: %d bytes read\", total);\n  fprintf(stdout,\", sha256: \");\n  for(int c = 0;c &lt; HashLen; c++) {\n    fprintf(stdout,\"%02x\", hash&#91;c]);\n  }\n  fprintf(stdout,\"\\n\");\n  fflush(stdout);\n\n  close(s);\n}<\/code><\/pre>\n\n\n\n<p>Ja seuraavana satunnaisuuden lukurutiini https-sivuille:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void fort_hash_https_page(unsigned char *host,unsigned char *port, unsigned char *page, unsigned char *hash)\n{\n  int s, status, bytes, total;\n  struct addrinfo hints, *res, *resp;\n\n  SSL_METHOD *method=NULL;\n  SSL_CTX *ctx=NULL;\n  SSL *ssl;\n\n  SSL_library_init(); \/\/see: http:\/\/h30266.www3.hpe.com\/odl\/axpos\/opsys\/vmsos84\/BA554_90007\/ch04s03.html                                                                                                                                                                                                                                                                                                                                    \n  OpenSSL_add_ssl_algorithms();\n  SSL_load_error_strings();\n\n  if((method = (SSL_METHOD *)\n      SSLv23_client_method()) == NULL) {\n    fprintf(stderr,\"\\n%s: cannot SSLv3_server_method()\", procname);\n    fflush(stderr);\n  }\n\n  if((ctx=SSL_CTX_new(method)) == NULL) {\n    fprintf(stderr,\"\\n%s: cannot SSL_CTX_new()\", procname);\n    fflush(stderr);\n  }\n\n  if((ssl=SSL_new(ctx)) == NULL) {\n    fprintf(stderr,\"\\n%s: cannot SSL_new()\", procname);\n    fflush(stderr);\n  }\n\n  if((s = fort_connect(host, port))&lt;0) {\n    fprintf(stderr,\"\\n%s: cannot fort_connect()\", procname);\n    fprintf(stderr,\", status: %d\", status);\n    fprintf(stderr,\", errno: %d\" , errno);\n    perror(\"fort_connect\");\n    fflush(stderr);\n  }\n\n  SSL_set_fd(ssl,s);\n\n  if((status=SSL_connect(ssl))&lt;=0) {\n    fprintf(stderr,\"\\n%s: cannot SSL_connect()\", procname);\n    fprintf(stderr,\", status: %d\", status);\n    fprintf(stderr,\", errno: %d\" , errno);\n    fprintf(stderr,\", SSL_get_error(): %d\\n\", SSL_get_error(ssl,status));\n    perror(\"SSL_connect\");\n    fflush(stderr);\n  }\n\n  unsigned char *format =\n    \"GET %s HTTP\/1.0\\r\\n\"\n    \"Host: %s\\r\\n\";\n  static unsigned char *msg = NULL;\n  static int msg_length=0;\n\n  dbs_printf(&amp;msg,&amp;msg_length, format, page, host);\n\n  if((status=SSL_write(ssl, msg, strlen(msg)))&lt;0) {\n    fprintf(stderr,\"\\n%s: SSL_write()\", procname);\n    fprintf(stderr,\", status: %d\", status);\n    fprintf(stderr,\", errno: %d\", errno);\n    fprintf(stderr,\", SSL_get_error(): %d\", SSL_get_error(ssl,status));\n    perror(\"SSL_write\");\n    fflush(stderr);\n  }\n  fflush(stdout);\n\n  HashCtx hashctx;\n  char buffer&#91;1024];\n\n  HashInit(&amp;hashctx);\n  total=0;\n  while((bytes=SSL_read(ssl, buffer, sizeof(buffer)))&gt;0) {\n    \/\/write(1,buffer,bytes);\n    HashUpdate(&amp;hashctx, buffer, bytes);\n    total+=bytes;\n  }\n  fflush(stdout);\n  if(bytes&lt;0) {\n    fprintf(stderr, \"\\n%s: SSL_read()\", procname);\n    fprintf(stderr, \", status: %d\", status);\n    fprintf(stderr, \", errno: %d\", errno);\n    fprintf(stderr,\", SSL_get_error(): %d\", SSL_get_error(ssl,status));\n    perror(\"SSL_read\");\n    fflush(stderr);\n  }\n\n  fflush(stdout);\n\n  HashFinal(hash, &amp;hashctx);\n\n  fprintf(stdout,\"dbs_hash_https_page: %d bytes read\", total);\n  fprintf(stdout,\", sha256: \");\n  for(int c = 0;c &lt; HashLen; c++) {\n    fprintf(stdout,\"%02x\", hash&#91;c]);\n  }\n  fprintf(stdout,\"\\n\");\n  fflush(stdout);\n\n  SSL_shutdown(ssl);\n  SSL_free(ssl);\n  SSL_CTX_free(ctx);\n  close(s);\n}\n<\/code><\/pre>\n\n\n\n<p>Ja kutsut, jotka k\u00e4ytt\u00e4v\u00e4t edellisi\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#ifdef FORT_USE_MOIJARICOM\n  unsigned char hash&#91;HashLen];\n\n  fort_hash_http_page(\"moijari.com\", \"5001\", \"\/\", hash);\n  . . .\n  fort_hash_https_page(\"moijari.com\", \"5005\", \"\/\", hash);\n  . . .\n#endif\n<\/code><\/pre>\n\n\n\n<p>Viel\u00e4 lyhennetyt listaukset http ja https sivuista (write(1,&#8230;) lauseen kommentti poistettu): Ensin http:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.0 200 OK\nLocation: \nServer: ressuhttps5 v0.96\nDate: Wed, 09 Dec 2020 16:09:33 GMT\nContent&amp;#8209;Length: 107665\n\n\n&lt;!DOCTYPE html&gt;\n&lt;html lang=\"fi\"&gt;\n\t&lt;head&gt;\n\t\t&lt;meta charset=\"UTF-8\"&gt;\n\t\t&lt;title&gt;Ressu random numbers&lt;\/title&gt;\n\t\t&lt;meta name=\"author\" content=\"Jari Kuivaniemi\"&gt;\n\t\t&lt;meta name=\"format-detection\" content=\"telephone=no\"&gt;\n\t&lt;\/head&gt;\n\t&lt;body&gt;\n\t\t&lt;h1&gt;Ressu random numbers&lt;\/h1&gt;\n\t\t&lt;code&gt;\n\t\t\txtDlKzcj6CpzUA9Q T&amp;#8209;ZKlo_TnLyitx5U 6JXokFUptT&amp;#8209;qeDIl JTRIgXXrIgNtT6vS nJ29kx3GlKPow_BC kvxrsSeNJFgzfSPL OWj&amp;\n#8209;x24mTYCI6Br&amp;#8209; C&amp;#8209;wpuj_vJdBxC6l&amp;#8209; oF1QaeChPYc2t_Ds kbxIkk4dbsvk6n87\n\t\t\t_YAauolsZg8rW11W lbkAu0zW4CbZyTjl yXq8vMOAhl8GM69u nbrz9oUsCWKbdDtp Hn7OONT9meWo1poo dst4Oi93e70Sn6At gL8hCIhiHrNRlCJb\n h1k84jd4MeRq00H2 ihs4m6BpICqk218P oXluzC4dgOrZyjl4\n. . .\n#8209;T PrsUHm2leFv5ag28 UkS01AOkrf4&amp;#8209;bwwU rEnXmZiBVl&amp;#8209;HcLg2 WerbBoY54Sf0W9Ph\n\t\t\tRNtYbIedrKpIlX07 lI7BurKAwAgTr5PP k6zK7fZ_3_lbj0k_ lVLvhAPzth0m1FgO qypvJfZPmmxEK5o0 678zIRU08AeiSjYP Y3F05r3_mJWwPIXu\n 1YjxyNil1zNxX&amp;#8209;Ny 9&amp;#8209;oYfkpaRiUXYLNt ZGq3ID3IMSEtNyOb\n\t\t\tsTSYILfkyFSHaepZ\n\t\t&lt;code&gt;\n\t\t&lt;h1&gt;Statistics&lt;\/h1&gt;\n\t\tmonobit: ones: 262412(50.054172%) zeroes: 261844(49.945828%), total: 524256&lt;br&gt;\n\t\tbitwise monobit data: 1(0: 32723, 1: 32809) 2(0: 32798, 1: 32734) 4(0: 32780, 1: 32752) 8(0: 32772, 1: 32760) 16(0: 32859, 1: \n32673) 32(0: 32941, 1: 32591) 64(0: 32831, 1: 32701) 128(0: 32708, 1: 32824)&lt;br&gt;\n\t\tbitwise monobit total: 524256, lowest: 32591(6.216619%), highest: 32941(6.283381%)&lt;br&gt;\n\t\tpoker2: data:  0:65502 1:65717 2:65691 3:65218&lt;br&gt;\n\t\tpoker2: total: 262128, lowest: 65218(24.880211%), highest: 65717(25.070576%)&lt;br&gt;\n\t\tpoker4: data:  0:8298 1:8203 2:8119 3:8138 4:8161 5:8176 6:8299 7:8086 8:8052 9:8350 10:8267 11:8184 12:8233 13:8266 14:8153 1\n5:8079&lt;br&gt;\n\t\tpoker4: total: 131064, lowest: 8052(6.143563%), highest: 8350(6.370933%)&lt;br&gt;\n\t\tpoker8: data:  0:247 1:263 2:249 3:266 4:255 5:228 6:251 7:239 8:278 9:270 10:272 11:272 12:293 13:254 14:259 15:271 16:260 17\n:255\n. . .\n\t\toriginal url: &lt;a href=\"https:\/\/moijari.com:5001\"&gt;https:\/\/moijari.com:5001&lt;\/a&gt;\n\t\t or &lt;a href=\"https:\/\/moijari.com:5001\"&gt;https:\/\/moijari.com:5001&lt;\/a&gt;&lt;br&gt;\n\t\t&lt;br&gt;&lt;br&gt;\n\t&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>Ja https sivu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.0 200 OK\nLocation: \nServer: Ressu3 version 0.10 \u00a9\n\n&lt;!doctype html&gt;\n&lt;html lang=\"fi\"&gt;&lt;head&gt;&lt;meta charset=\"utf-8\"&gt;&lt;title&gt;Ressu random numbers&lt;\/title&gt;&lt;meta name=\"author\" content=\"Jari Kuivaniemi\"&gt;&lt;meta name=\"copyr\night\" content=\"Jari Kuivaniemi\"&gt;&lt;\/head&gt;&lt;body&gt;\t\t&lt;h1&gt;Ressu random numbers&lt;\/h1&gt;\n\t\t&lt;code&gt;\n\t\t\tKPxIRgaloF0aT9qb m50LK37i91o0IeR6 zYs0MIsp0MNYJzfn 6zp4TEYwyVAAVnL2 Z2Rb4kBy318bcE1G cpXFEiYWuT9xDlhI DxinrPJQNstAn_gr\n NgQis3splTVk11Xy kk5UQkU9qfQVR8cw 3C0JCr_k_Gw6XbGS\n\t\t\t0szaE96f9oRavDIE cmwNE&amp;minus;lkEq0bi4HN mcSs&amp;minus;NRoAfqvsOMN nhail_10v4vLHUvx udpcVkqYnZArZW6K SeN3NnfBTr3ih1FW fzB7\nAzeopJEqkY0c JBr0XL5Mjem24X3o qkQTKuCJAFfqNmDQ AaNU0XiRd0zDm7w6\n. . .\n\t\t\tiCi5IqV9GGwuPcfg P0TOAPjDpWTjFfml Q2p6a2Er11zoJsXG JbNG4&amp;minus;Rd_GsqwPTw BKDCD1FMzwBZ2Tzf J3WU4q2aX8ndCzBF xePgfF9QvP\nwhOO4b qoRWJ4zYNzJrSh7h XyIVheIhIFuL69l&amp;minus; s2WkOHhQTl_pCocc\n\t\t\t7nTleVrEgdPy99jf nhqsW3aHnv5FT7gX 2XUXSIW6ICUV15yY BfnEgZrVViuGHVj0 &amp;minus;&amp;minus;yJaXi3z9lKdIgu 4GGsribNp8IxXrWc bgjn\n8VDO_BZuQbcY hV6PQezdZEwvPWfb 8zxaacl4liNKX&amp;minus;vK rAz7_dI3&amp;minus;EVT4KiF\n\t\t\tvWK8jhkPuyEkjc8Y\t\t&lt;\/code&gt;\n\t\t&lt;h1&gt;Statistics&lt;\/h1&gt;\n\t\tmonobit: ones: 261605(49.900240%) zeroes: 262651(50.099760%), total: 524256&lt;br&gt;\n\t\tbitwise monobit data: 1(0: 32707, 1: 32825) 2(0: 32487, 1: 33045) 4(0: 32584, 1: 32948) 8(0: 32557, 1: 32975) 16(0: 32705, 1: \n32827) 32(0: 32950, 1: 32582) 64(0: 32604, 1: 32928) 128(0: 33011, 1: 32521)&lt;br&gt;\n\t\tbitwise monobit total: 524256, lowest: 32487(6.196782%), highest: 33045(6.303218%)&lt;br&gt;\n\t\tpoker2: data:  0:65195 1:65810 2:65405 3:65718&lt;br&gt;\n\t\tpoker2: total: 262128, lowest: 65195(24.871437%), highest: 65810(25.106055%)&lt;br&gt;\n\t\tpoker4: data:  0:8121 1:8158 2:8116 3:8173 4:8250 5:8196 6:8231 7:8323 8:8043 9:8209 10:8311 11:8057 12:8213 13:8247 14:8127 1\n5:8289&lt;br&gt;\n. . .\n\t\truns: total: 524256&lt;br&gt;\n\t\truns8: any:  1:65078 2:227&lt;br&gt;\n\t\truns8: total: 65532&lt;br&gt;\n\t\taverage: total 8332443, count: 65532, average: 127.150749&lt;br&gt;\n\t\tentropy: 7.997152&lt;br&gt;\n&lt;br&gt;&lt;br&gt;Ressu3 version 0.10 \u00a9,  sha256(97a32f735c9cc5e738e99a8ffe4cd7a195b88a3525e58d90fd53e7e8eab90e27)&lt;br&gt;&lt;br&gt;\t\toriginal url: \n&lt;a href=\"https:\/\/moijari.com:5005\"&gt;https:\/\/moijari.com:5005&lt;\/a&gt;\n\t\t or &lt;a href=\"https:\/\/moijari.com:5005\"&gt;https:\/\/moijari.com:5005&lt;\/a&gt;&lt;br&gt;\n&lt;\/body&gt;&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>T\u00e4ss\u00e4 viel\u00e4 esimerkki useamman l\u00e4hteen k\u00e4yt\u00f6st\u00e4: palaset fort.c (<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/moijari.com\/?p=964\">https:\/\/moijari.com\/?p=964<\/a>) ohjelmasta: uusi satunnaisuus lis\u00e4t\u00e4\u00e4n fort_reseed() funktiolla, joka tekee &#8220;laskutoimituksen&#8221; fort_key = hash(fort_key + cvar + uusi), eli lis\u00e4\u00e4 uusia satunnaisbittej\u00e4 fort_key muuttujaan. Fort_key muuttujassa s\u00e4ilytet\u00e4\u00e4n &#8220;avain&#8221;, jonka avulla luodaan uudet k\u00e4ytt\u00e4j\u00e4n tilaamat satunnaisbitit luodaan.<\/p>\n\n\n\n<p>Fort_init t\u00e4ytt\u00e4\u00e4 ensin fort_key muuttujan ressun luomilla satunnaisbiteill\u00e4. Sen j\u00e4lkeen fort_key:iin lis\u00e4t\u00e4\u00e4n bittej\u00e4 \/dev\/random ja\/tai \/dev\/urandom laitteelta. T\u00e4m\u00e4n j\u00e4lkeen lis\u00e4\u00e4n satunnaisuuteen viel\u00e4 bittej\u00e4 viel\u00e4 moijari.com:n 5001 ja 5005 porteista. Lopuksi ajetaan viel\u00e4 fortin satunnaisbittej\u00e4 luova osuus, jolta saadaan lis\u00e4ksi sis\u00e4isesti luotuja satunnaisbittej\u00e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void fort_reseed(int len, unsigned char *buf)\n{\n  HashCtx hash;\n\n  FORT_INTERNAL_EVENTS_START(22)\n\n  hash_init(&amp;hash);\n  hash_update(&amp;hash, fort_key, sizeof(fort_key));\n  hash_update(&amp;hash, (unsigned char *)&amp;cvar,\n      sizeof(cvar));\n  hash_update(&amp;hash, buf, len);\n  hash_final(fort_key, &amp;hash);\n  inccvar();\n\n  . . .\n}\n\nvoid fort_init()\n{\n\n  . . .\n\n#ifdef RESSU\n  ressu_genbuffer(sizeof(fort_key), fort_key);\n  dump_pools(\"Generate fort key w ressu\");\n#endif\n\n  . . .\n\n  unsigned char temp&#91;64];\n\n#ifdef FORT_USE_URANDOM\n  memset(temp, 0, sizeof(temp));\n  fort_readfile_xor(sizeof(temp), temp,\n      \"\/dev\/urandom\");\n  fort_reseed(sizeof(temp), temp);\n\n  dump_pools(\"Randomness from urandom\");\n#endif\n\n#ifdef FORT_USE_RANDOM\n  memset(temp, 0, sizeof(temp));\n  fort_readfile_xor(sizeof(temp), temp,\n      \"\/dev\/random\");\n  fort_reseed(sizeof(temp), temp);\n\n  dump_pools(\"Randomness from random\");\n#endif\n\n  unsigned char hash&#91;HashLen];\n\n#ifdef FORT_USE_MOIJARICOM5001\n  fort_hash_http_page(\"moijari.com\", \"5001\", \"\/\", hash);\n  fort_reseed(sizeof(hash), hash);\n  dump_pools(\"Rand. from moijari.com:5001\");\n#endif\n\n#ifdef FORT_USE_MOIJARICOM5005\n  fort_hash_https_page(\"moijari.com\", \"5005\", \"\/\", hash);\n  fort_reseed(sizeof(hash), hash);\n  dump_pools(\"Rand. from moijari.com:5005\");\n#endif\n\n  . . .\n\n#ifdef FORT_INTERNAL_EVENTS\n  if(fort_internal_events) {\n    \/\/ Create some internal events                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n    for(c=0; c&lt;64; c++) {\n      FORT_INTERNAL_EVENTS_START(34)\n      fort_random_data(sizeof(temp), temp);\n      FORT_INTERNAL_EVENTS_END(35)\n    }\n  }\n  dump_pools(\"Internal events\");\n#endif\n\n  fort_reseed_count = 0;\n  fort_next_reseed = 0;\n\n  \/\/ Reseed fort_key with new events                                                                                            \n  fort_random_data(sizeof(temp), temp);\n  fort_reseed(sizeof(temp), temp);\n<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aluksi pari apuohjelmaa, joilla luodaan yhteys ja tulostetaan merkkijonoja: Edit: Kun k\u00e4yt\u00e4t satunnaisuutta jostain l\u00e4hteest\u00e4, \u00e4l\u00e4 k\u00e4yt\u00e4 sit\u00e4 suoraan vaan lis\u00e4\u00e4 se muihin l\u00e4hteisiin (esim hash funktiolla) , ja muodosta tuloksesta satunnaisbittej\u00e4. K\u00e4yt\u00e4 n\u00e4it\u00e4 vain sivuihin, joiden k\u00e4ytt\u00f6\u00f6n sinulla on lupa ja harvoin, sill\u00e4 vaarana on palvelunesto. Muista noudattaa s\u00e4\u00e4nt\u00f6j\u00e4 ja lakeja. Nyt my\u00f6s https&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=1472\">Continue reading <span class=\"screen-reader-text\">Hash:\u00e4\u00e4m\u00e4ll\u00e4 satunnaisuutta HTTP ja HTTPS sivuista<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1472"}],"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=1472"}],"version-history":[{"count":17,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1472\/revisions"}],"predecessor-version":[{"id":1497,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1472\/revisions\/1497"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}