Автор Гілка: Python into pseudocode  (Прочитано 6944 раз)

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Python into pseudocode
« : 2012-04-04 16:22:50 »
Скрипт на Пітоні

import random

P = 295075153L   # about 2^28

class WeakPrng(object):
    def __init__(self, p):   # generate seed with 56 bits of entropy
        self.p = p
        self.x = random.randint(0, p)
        self.y = random.randint(0, p)
  
    def next(self):
        # x_{i+1} = 2*x_{i}+5  (mod p)
        self.x = (2*self.x + 5) % self.p

        # y_{i+1} = 3*y_{i}+7 (mod p)
        self.y = (3*self.y + 7) % self.p

        # z_{i+1} = x_{i+1} xor y_{i+1}
        return (self.x ^ self.y)


prng = WeakPrng(P)
for i in range(1, 10):
  print "output #%d: %d" % (i, prng.next())

Взагалі-то, не розумію наступний рядок:

x_{i+1} = 2*x_{i}+5

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Python into pseudocode
« Відповідей #1 : 2012-04-04 18:00:00 »
crypto-class :D

Це щось типу латексового запису математичного виразу Xi+1 = Xi * 2 + 5.

Підказка: ця штука вирішується брутфорсом, але чого - не скажу. Зверніть увагу, як між собою пов’язані x, y та z (кінцеве значення).
« Змінено: 2012-04-04 18:16:28 від ISBear »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Python into pseudocode
« Відповідей #2 : 2012-04-04 22:01:09 »
crypto-class :D

Це щось типу латексового запису математичного виразу Xi+1 = Xi * 2 + 5.

Підказка: ця штука вирішується брутфорсом, але чого - не скажу. Зверніть увагу, як між собою пов’язані x, y та z (кінцеве значення).

Дякую, достатньо було сказати, що # позначає коментар? Після того як це дізнався все стало зрозумілим :)

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Python into pseudocode
« Відповідей #3 : 2012-04-04 22:41:17 »
Була у мене така думка, але я вирішив, що якщо в заголовку згадується псевдокод, то ви зрозуміли, що це є псевдокод...
До речі, в таких випадках сильно допомагає синтаксичне забарвлення.

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Python into pseudocode
« Відповідей #4 : 2012-04-05 11:25:29 »
crypto-class :D

Підказка: ця штука вирішується брутфорсом, але чого - не скажу. Зверніть увагу, як між собою пов’язані x, y та z (кінцеве значення).

231886864
#include <iostream>
#include <sstream>
using namespace std;

typedef unsigned long ulong;


int main() {
      const ulong P = 295075153;
      ulong x, y;

      const int kO = 9;
      ulong o[kO+1] = {210205973, 22795300, 58776750, 121262470, 264731963, 140842553, 242590528, 195244728, 86752752, 0};

      for(x = 0; x <= P; x++) {
            y = o[0] ^ x;
            ulong right = y;
            ulong left = x;
            stringstream s;
            for (int j = 0; j < kO+1; j++) {
                  right = (3 * right + 7) % P;
                  left = (2 * left + 5) % P;
                  if ((right ^ left) != o[j+1]) {
                        if (j)
                              cout << s.str() << j << ": " << (right ^ left) << endl;
                        break;
                  }
                  else {
                        s << j << ": " << (right ^ left) << endl;
                  }      
            }
      }
}

Підкажіть, будь ласка, розв"язок першої задачки. А то в мене вийшов рядок, але він його не приймає, може я просто якийсь місспелінг роблю.
The secure message is, when using a stream cipher, never use the key more than once
« Змінено: 2012-04-05 11:28:18 від Yola »

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Python into pseudocode
« Відповідей #5 : 2012-04-05 12:07:25 »
231886864
Красивий код, я за нестачею часу зупинився на "волохатому" рішенні (на C).

Цитата
Підкажіть, будь ласка, розв"язок першої задачки. А то в мене вийшов рядок, але він його не приймає, може я просто якийсь місспелінг роблю.
spoiler
my @guesses = (  # v <- stopper
"We can factor the number 15 with quantum computers. We can also factor the number 15 with a dog trained to bark three times - Robert Harley",
"Euler would probably enjoy that now his theorem becomes a corner stone of crypto - Annonymous on Euler's theorem",
"The nice thing about Keeyloq is now we cryptographers can drive a lot of fancy cars - Dan Boneh",
"The ciphertext produced by a weak encryption algorithm looks as good as ciphertext produced by a strong encryption algorithm - Philip Zimmermann",
"You don't want to buy a set of car keys from a guy who specializes in stealing cars - Marc Rotenberg commenting on Clipper",
"There are two types of cryptography - that which will keep secrets safe from your little sister, and that which will keep secrets safe from your government - Bruce Schneihu",
"There are two types of cyptography: one that allows the Government to use brute force to break the code, and one that requires the Government to use brute force to break the code - ",
"We can see the point where the chip is unhappy if a wrong bit is sent and consumes more power from the environment - Adi Shamir",
"A (private-key)  encryption scheme states 3 algorithms, namely a procedure for generating keys, a procedure for encrypting, and a procedure for decrypting. ",
" The Concise OxfordDictionary (2006) def ines crypto as the art of  writing o r solving codes. ",
"The secret message is: When using a stream cipher, never use the key more than once",
);
« Змінено: 2012-04-05 12:14:25 від ISBear »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Python into pseudocode
« Відповідей #6 : 2012-04-05 12:15:58 »
231886864
Красивий код, я за нестачею часу зупинився на "волохатому" рішенні (на C).

Цитата
Підкажіть, будь ласка, розв"язок першої задачки. А то в мене вийшов рядок, але він його не приймає, може я просто якийсь місспелінг роблю.
spoilermy @guesses = (
"We can factor the number 15 with quantum computers. We can also factor the number 15 with a dog trained to bark three times - Robert Harley",
"Euler would probably enjoy that now his theorem becomes a corner stone of crypto - Annonymous on Euler's theorem",
"The nice thing about Keeyloq is now we cryptographers can drive a lot of fancy cars - Dan Boneh",
"The ciphertext produced by a weak encryption algorithm looks as good as ciphertext produced by a strong encryption algorithm - Philip Zimmermann",
"You don't want to buy a set of car keys from a guy who specializes in stealing cars - Marc Rotenberg commenting on Clipper",
"There are two types of cryptography - that which will keep secrets safe from your little sister, and that which will keep secrets safe from your government -
"There are two types of cyptography: one that allows the Government to use brute force to break the code, and one that requires the Government to use brute for
"We can see the point where the chip is unhappy if a wrong bit is sent and consumes more power from the environment - Adi Shamir",
"A (private-key)  encryption scheme states 3 algorithms, namely a procedure for generating keys, a procedure for encrypting, and a procedure for decrypting. ",
" The Concise OxfordDictionary (2006) def ines crypto as the art of  writing o r solving codes. ",
"The secret message is: When using a stream cipher, never use the key more than once",
);
Дякую, я не те щоб лінивий сам доробити, але код першого задання на роботі, а відповідь я відсилав разом із другим зараз з дому, тому. А чекати до завтра не хотілось))

string stream дуже гальмує, вставив його для краси)) Можеш своє показати, як маєш бажання.
Цікаво, тут ще хтось ці класи проходить))
« Змінено: 2012-04-05 12:25:33 від Yola »

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Python into pseudocode
« Відповідей #7 : 2012-04-05 12:39:22 »
Та там, власне, те саме, тільки замість внутрішнього циклу — купа if ів.

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Python into pseudocode
« Відповідей #8 : 2012-05-19 17:41:37 »
А четверте програмне завдання зробив? У мене вийшло

ccf6bca575cd850c743b8ffefbddefd9
bfb621a5a90c118dc9ccc474f323a174
7b3876f605eb29540cdcadedee44785d
caefc5fba47564dd4bae366674d57c83
ea22bf206085624b5655ad3decc220cf

але він не приймає, може через те, що вже пропустив дату?

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Python into pseudocode
« Відповідей #9 : 2012-05-19 17:58:55 »
Там виходить цілком осмислений рядок. Власне, я навіть програми не писав, скористався онлайновим xor-ером.
« Змінено: 2012-05-19 18:01:53 від ISBear »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Python into pseudocode
« Відповідей #10 : 2012-05-19 18:21:40 »
Я їм теж користувався але для інших цілей.

Там, коли 404, треба хор-ити черговий байт (пару знаків) із 01б потім 02 і т.д. до 0F? Я це роблю, але відповіді не отримав. Чи після цього треба ще щось зробити?

Перший 404 має вигляд:
202020202020202020202020202020d8cac544d7942e50e1a0afa156c803d115

d8 - останній байт, значить останній байт першого блоку - d9? Але це більше 7F (127), тобто ця фраза не може бути англійською?

Я зрозумів помилку, вони там ідуть не по порядку)) Та ні, по порядку((

Ти 16-й рядок 404 конкатенував із 1010101010101010 ?
« Змінено: 2012-05-19 19:00:28 від Yola »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Python into pseudocode
« Відповідей #11 : 2012-05-19 18:46:19 »
А на третю маєш відповідь, якщо так, то оприлюдни, будь ласка, бо я не встигну сам.

Взагалі, якщо маєш відповіді на інші, то давай. Якщо не хочеш щоб всі бачили - особисто. Буду вдячний.

Здав 4-й тиждень на 6.75, а треба 7. Якщо буде відповідь, то це ж екстра кредіт, чи як. Ти зрозумів цю систему?


Виявилось, якщо здаєш запізно, то зараховують лише половину балів, так що нічого вже не світить, хоча розв,язок  4 задачі цікаво було б знайти.
« Змінено: 2012-05-20 00:32:20 від Yola »

Відсутній Yola

  • Дописувач
  • **
  • дописів: 70
  • Карма: +0/-0
  • http://uk.wikipedia.org/wiki/User:Igor_Yalovecky
Re: Python into pseudocode
« Відповідей #12 : 2012-05-29 12:22:27 »
Якщо комусь цікаво, то ось код для 5 тижня на корсієрі з криптографії. Відповідь - 375374217830.

Week 5 - Programming Assignment - solution (coursera, cryptography):
#include <gmp.h>
#include <gmpxx.h>
    
#include <iostream>
#include <iomanip>
#include <map>
#include <ctime>

using namespace std;

#include "eu.h"

const long k2in20 = 1048576;

const mpz_class g("11717829880366207009516117596335367088558084999998952205599979459063929499736583746670572176471460312928594829675428279466566527115212748467589894601965568");
const mpz_class p("13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171");
const mpz_class h("3239475104050450443565264378728065788649097520952449527834792452971981976143292558073856937958553180532878928001494706097394108577585732452307673444020333");
//const long k2in20 = 8;
//const mpz_class g("57");
//const mpz_class p("137");
//const mpz_class h("8");

inline void percentage(string prefix, long l) {
      if (!(l % 1000))
            cout << prefix << setprecision(3) << setw(5) << setfill(' ') << (double)l / 1000 / 10 << "%" << endl;
}

int main() {
      time_t started_at = time(0);
      cout << "Start time is " << ctime(&started_at) << endl;
      map<mpz_class, long> left;
      mpz_class g_accum = 1;
      mpz_class gcd, x, y;
      for (long l = 1; l <= k2in20; l++) {
            g_accum *= g;
            g_accum %= p;
            ex_al_eu(g_accum, p, gcd, x, y);
            mpz_class key = (x * h) % p + ((x * h) % p < 0 ? p : 0);
            left[key] = l;
            percentage("Left: ", l);
//            cout << "left[" << key << "] = " << l << endl;
      }
      
      mpz_powm_ui(g_accum.get_mpz_t(), g.get_mpz_t(), k2in20, p.get_mpz_t());
      
      mpz_class g_accum2 = 1;
      for (long l = 1; l <= k2in20; l++) {
            g_accum2 *= g_accum;
            g_accum2 %= p;
//            cout << g_accum2 << endl;
            if (left.find(g_accum2) != left.end()) {
                  cout << "Answer is x1 = " << left[g_accum2] << " and x0 = " << l << endl;
                  break;                  
            }            
            percentage("Right: ", l);
      }
      time_t ended_at = time(0);
      cout << "End time is " << ctime(&ended_at) << endl;
      cout << "Execution time is " << ended_at - started_at << endl;
      
      return 0;
}

Файл eu.h з втіленням розширеного алгоритму Евкліда:
template<class T> void ex_al_eu_in(const T &r1, const T &r2, const T &x1, const T &x2, const T &y1, const T &y2, T &gcd, T &a, T &b) {
      T r3 = r1 - r2 * (r1 / r2);
      T x3 = x1 - x2 * (r1 / r2);
      T y3 = y1 - y2 * (r1 / r2);
      if (0 != r3)
            ex_al_eu_in(r2, r3, x2, x3, y2, y3, gcd, a, b);
      else {
            gcd = r2;
            a = x2;
            b = y2;
      }
}

template<class T> void ex_al_eu(const T &r1, const T &r2, T &gcd, T &a, T &b) {
      if (0 == r1 || 0 == r2)
            gcd = a = b = 0;
      else
            ex_al_eu_in(r1 > r2 ? r1 : r2, r1 < r2 ? r1 : r2, T(1), T(0), T(0), T(1), gcd, r1 > r2 ? a : b, r1 < r2 ? a : b);
}

GMP ставимо так:
./configure --enable-cxx
make
make install
make check
« Змінено: 2012-05-29 16:15:43 від Yola »