1. A method of software protection comprising the steps of: encrypting at least a predetermined portion of each program offering sold by any one of a plurality of software vendors with a unique file key; distributing the encrypted program as a program file; providing a computer with a unique cryptographic key identifier, a processor, a protected memory and a cryptographic facility containing a cryptographic key associated with said unique cryptographic key identifier; providing a purchaser of the encrypted program with an authorization number unique to the particular program and said cryptographic identifier; decrypting that portion of said program encrypted by said encrypting step with said cryptographic facility as a function of said authorization number; storing at least said predetermined portion of said decrypted program in said protected memory; and reading said stored portion of said decrypted program from said protected memory only to said processor for execution; wherein the step of providing the secret password is performed by the steps of: providing the purchaser of the storage medium containing the encrypted program with an authorization number and identifying the encrypted program with a program number and the storage medium with a storage medium number; requesting the purchaser to input the authorization number, the program number, the storage medium number and a number identifying said cryptographic key identifier; computing from the inputed program number and storage medium number an authorization number; comparing the computed authorization number with the inputted authorization number; providing a key distribution center with the inputted program number, storage medium number and the number identifying said cryptographic key identifier if the computed and inputted authorization numbers are the same, otherwise rejecting a password request by the purchaser; generating a first key as a function of said cryptographic key identifier and then encrypting the program number and storage medium number concatenated together with said first key to produce a second key at the key distribution center; and encrypting the secret file key of the program with said second key to produce said password.