A general public key cryptographic Knapsack algorithm based on linear algebra