Best Blowfish command line tool? - command-line

Our application needs to encrypt/decrypt files using (for instance) Blowfish encryption algorithm. We know bcrypt could be a good choice, but it cannot be called directly from our application (as it prompts for key phrase).
Which is the best existing option?
We prefer a Windows tool, though Linux would be good as well.

http://www.openssl.org/docs/crypto/blowfish.html programming interface
http://www.openssl.org/docs/apps/enc.html command line interface
Example:
openssl enc -base64 -e -bf-cbc -in <infile> -out <outfile> -kfile <passphrase file>
(replace -e with -d to decrypt)

I coudln't find one I liked; so I wrote one in Go. Here it is: https://prologic.github.io/fish/
Example:
$ echo 'Hello World' | fish -e -k mysecret -
Pretty easy to install with:
$ go get github.com/prologic/fish
Also supports both Blowfish and the newer Twofish

Related

Did `pwd` use to have a `-W` option?

I am reviewing the source code for gitflow-avh (A VirtualHome edition), version 1.12.3, which ships with Git for Windows, version 2.31.1. I'm looking at lines 67-73 of the script git-flow.
*MINGW*)
export GITFLOW_DIR=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
pwd () {
builtin pwd -W
}
;;
*)
# The sed expression here replaces all backslashes by forward slashes.
# This helps our Windows users, while not bothering our Unix users.)
export GITFLOW_DIR=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
;;
esac
What is the -W option? I'm only aware of -L and -P in bash. I'm fairly confident this is a "MINGW-ism", but I'm having trouble finding documentation online.
Does anyone know what the -W option does?
Ok, so I found this specifically has to do with MSYS2, as opposed to MINGW.
Per MSYS2's website, "How does MSYS2 differ from Cygwin?":
I had to run MSYS2 itself to actually see what the -W option provided:
In my "root" directory in Git Bash on Windows, pwd just gives me /.
But with -W, I get the real location:
$ pwd -W
C:/Program Files/Git
There's nothing on the man page for pwd, of course. Based on #A. Hendry's answer, I think I'll just alias pwd so that it always uses the -W option.

'sed' command does not work normally in PBS scripts

I use torque to submit the test script shown blow
#!/bin/bash
#PBS -N test
#PBS -l nodes=1:ppn=1
#PBS -q ser
#PBS -V
#PBS -S /bin/bash
sed 's/a//' <<< aaabbbaaa
sed 's/\(a\)//' <<< aaabbbaaa
sed 's/a\+//' <<< aaabbbaaa
The expect output should be
aabbbaaa
aabbbaaa
bbbaaa
but actually when i use qsub to submit this file, the output becomes
aabbbaaa
aaabbbaaa
aaabbbaaa
The last two commands do not work. And it seems that the character '\' leads to the fault. But why does this happen.
The sed implementation on the server probably has a different syntax than what you have locally.
Without details about the remote system, this is mildly speculative; but look for the manual page and search for an option to enable Extended Regular Expression syntax (usually -E or -r; if available, probably lose the backslash before the regex specials then).
As a partial and obvious workaround, aa* is equivalent to a\+ but no similar workaround exists for grouping.
Maybe also read up on the differences between POSIX Basic Regular Expression syntax (BRE) and ERE; though chances are your PBS system is using something which even predates POSIX if it's legacy big iron.
If you want to write code which is portable between Linux, MacOS, and whatever behemoth dinosaur OS you have on the PBS system, maybe try Perl instead of sed. Even if you can only rely on Perl 4.x constructs, that's a platform which is a lot more uniform (and also a lot more versatile) than trying to figure out how to write portable sed scripts.
perl -pe 's/(a+)//'

Determine if app is Wayland or X client

Is there a way to determine if an arbitrary app is an X client or a Wayland client (or neither) from the command line without fully launching it?
You can run ldd on the binary to check which libraries it links against. If it has "libwayland-client" you're probably looking at a Wayland client. For X you need to look for "libX11" or "libxcb".
To expand on the excellent answer given by #Alexander Sukhoverkhov what needs to be done is:
cd /usr/bin
ldd $application_name | grep wayland
Furthermore, to check which binaries have wayland support you could try:
cd /usr/bin
find . | xargs ldd | grep wayland -B 55
The above is not really very clean but it works. You can further pipe it to a file and then use vim to navigate.
cd /usr/bin
find . | xargs ldd | grep wayland -B 55 >> candidates
vim candidates
# Use vi movement
The -B flag stands for before and helps to print the binary name.

run a prolog code with swipl in a command line

I am searching for swipl the similar feature as perl -e
In particular, I want to run prolog code in this fashion:
swipl --wanted-flag "fact(a). message:-writeln('hello')." -g "message" -t halt
This is possible to do with
swipl -f file -g "message" -t halt
where the prolog clauses are written in file
I am running swipl on the server side that takes user input as prolog clauses, therefore writing a file on the server is not a good idea.
One thing you can do is to use load_files/2 with the option stream, and load from standard input, not from an argument (you can still pass the entry point as an argument, I guess):
Say in a file fromstdin.pl you have:
main :-
load_files(stdin, [stream(user_input)]),
current_prolog_flag(argv, [Goal|_]),
call(Goal),
halt.
main :- halt(1).
and with this you can do:
$ echo 'message :- format("hello~n").' | swipl -q -t main fromstdin.pl -- message
|: hello
The comments by #false to this answer and the question will tell you what this |: is, if you are wondering, but if it annoys you, just do:
$ echo 'message :- format("hello~n").' \
| swipl -q -t main fromstdin.pl -- message \
| cat
hello
instead.
This will let you read any Prolog from standard input and call an arbitrary predicate from it. Whether this is a clever thing to do, I don't know. I would also not be surprised if there is a much easier way to achieve the same.

MakeCert - is it possible to change the key size?

When I generate a certificate using MakeCert.exe, I want to change the key size from 1024 to 2048.
Is this possible? Or do I need to setup a certificate authority (CA)?
Here the following syntax is used:
makecert -pe -ss MY -$ individual -n "CN=your name here" -len 2048 -r
Sorry I cannot test it, since I don't have Makecert.
A description of Makecert options can be found at MSDN, but I didn't see an explicit one for setting the key length.