Не существует 100% безопасного решения, потому что в какой-то момент вам необходимо загрузить ключ в память, чтобы можно было выполнить дешифрование, и хакер, достаточно опытный, сможет его перехватить. Лучшее, что вы можете сделать, - это сделать его очень трудным для захвата и уменьшить воздействие на данные (максимально ограничив доступ), если ключ скомпрометирован.
Что касается того, как сделать его более безопасным ... у вас может быть комбинированный ключ, который состоит из чего-то, хранящегося в программе, и чего-то, полученного из пароля пользователя?