Contact - Josh Blum

Development services

I am operating as a independent contractor. If you would like to enlist my services, please send me an email with a description of the work that you have in mind. Also checkout the development services offered through Pothosware.

Pothos support queries

Please use the Pothos users group for public support and discussions concerning the Pothos data-flow software suite.

Contact Me Directly

Email only please.

  • Email: josh AT joshknows DOT com
  • Secure email: download my public key
  • Phone(md5): a7852454caf08e4e8de354677d41c36f

I have been receiving too many weird calls at odd hours. So I have re-listed my phone number as an md5 hash. The original string was in the format xxx-xxx-xxxx. If you can decode it you can call it. Using google cached webpages would be cheating.

Example python code to "brute-force" my phone number

import hashlib, random
my_phone_num_hash = 'a7852454caf08e4e8de354677d41c36f'

def get_phone_numbers():
	to_phone = lambda x: x[:3] + '-' + x[3:6] + '-' + x[6:10]
	while True: yield to_phone(str(random.random())[2:])

for phone_num in get_phone_numbers():
	if hashlib.md5(phone_num).hexdigest() == my_phone_num_hash:
		print phone_num; break

Example C code to "brute-force" my phone number

unsigned char cmp[] = {0xa7,0x85,0x24,0x54,0xca,0xf0,0x8e,0x4e,
                        0x8d,0xe3,0x54,0x67,0x7d,0x41,0xc3,0x6f};
int main ()
{
        MD5_CTX c;
        unsigned char md[16];
        char *ph = "XXX-XXX-XXXX";
        char phbuf[16];
        unsigned long long foo;
       
        memset (phbuf, 0x0, sizeof(phbuf));
        strcpy (phbuf, ph);
       
        srand48 (getpid() ^ time(0));
        for (foo = 0LL;;foo++)
        {
                int j;
               
                if ((foo % 1000000LL) == 0)
                {
                        fprintf (stderr, "Trial number %lld\\n", foo);
                }
                for (j = 0; phbuf[j] != 0; j++)
                {
                        if (phbuf[j] != '-')
                        {
                                phbuf[j] = (lrand48() % 10 ) + '0';
                        }
                }
                MD5_Init(&c);
                MD5_Update (&c, phbuf, 12);
                MD5_Final (md, &c);
                if (memcmp (md, cmp, sizeof(cmp)) == 0)
                {
                        break;
                }
        }
        fprintf (stdout, "The value is %s\\n", phbuf);
        exit (0);
}
Last edited: Tue, Jan 27 2015 - 07:17PM