Checkstyle has a nice rule for Util classes, which states:
Utility classes should not have any non-private constructors and should be final.
This is because you don't want shadowing to mess with your methods and because if you need a constructor then it's not a utility class.
Going back to your example:
Having a constructor initialize static fields is BAD.
Why? Because they are mutable.
You are specifically saying that they can change by making them non-final. So, suppose your method is doing something with them, changing their values, and then another thread goes in and creates another instance of your object while that method is running. And hence - resetting the static fields. Your method suddenly breaks horribly without any apparent reason and without you being able to reproduce it.
A better way to do this is to make the fields final. If they are immutable, then there is no danger. But how do you initialize them? You can't use a constructor (compiler error). What can help is static initializers. They are run once when the class is loaded and have full access to static fields. You may want to use one block to set your values.
If the fields are mutable, then making them static and initialize in a constructor is the worst thing you can do. Rethink your design. Otherwise you are opening a whole new can of worms in threading problems.
A word of warning:
I'm not sure by the code you've given, but it seems to me that using a static-singleton util class is a bad idea here. Most apps will want to change keys every now and then, and non-trivial logic in a static class is very difficult to test around. There are better ways of doing this, the most straightforward of which - make your CipherUtil
an actual bean.