A key fragment generator accepts a key string, such as from a key string
generator, and produces a plurality of key fragments that can be entered
by a human with a lower likelihood of error than if the human attempted
to enter the original key string. A key defragmenter accepts a plurality
of entered key fragments, reconstitutes the original key string from the
entered key fragments and, optionally, provides the reconstituted key
string to a software package or other license manager. The key fragment
generator can produce "friendly" key fragments that are easier for humans
to read and enter than the arbitrary character strings that characterize
typical key strings. The key fragment generator can produce
"error-detectable" key fragments. If an error-detectable key fragment is
entered incorrectly, the key defragmenter can generate an error message
and permit a user to enter the key fragment again. The key fragment
generator can produce "error-correctable" key fragments. If an
error-correctable key fragment is entered incorrectly, the key
defragmenter can generate an error message that describes the nature of
the error or that draws a user's attention to a portion of the key
fragment that the user entered incorrectly. The error message can include
a "hint" related to one or more confusable characters that were entered
incorrectly.