I finally figured out why I was never able to create matching encrypted passwords for my PHP apps from the command line. For instance:
$ echo abc | shasum 03cfd743661f07975fa2f1220c5194cbaff48451 - $ php -r 'echo sha1("abc");' a9993e364706816aba3e25717850c26c9cd0d89d
Not quite the same. The reason is of course totally obvious, just not visible - echo puts a newline after everything by default, so instead of the previous, one should use:
$ echo -n abc | shasum a9993e364706816aba3e25717850c26c9cd0d89d -
Duh. The same thing with md5(). I think I might have figured this out before but then forgot about it so hopefully it'll stick better after posting this.