I hired a tutor to help me with a programming task (he did the whole assignment for me) a few days ago, but instead of submitting his own work to my professor, I changed the code from him into mine (I rewrote the codes from him into something else, I modified functions, I changed the code structure, and I tried to make sure the similarity of his work and mine was nearly zero, and when I checked the similarity report the similarity was low about 10-15%)). Is my action considered as cheating or academic dishonesty?
First: That you take into account a "similarity report" sounds worrying. Of course it is possible to commit plagiarism which a similarity report cannot detect (reformulation of ideas or translations, for example). You might want to read up or ask around what plagiarism is.
Next: What you did sounds very much like cheating (if the expectation was to do this task on your own): You got the idea from somewhere else and rewrote it. It seems to me that rewriting was not the idea of the task. "Rewriting" sounds to me like "changing variable names, restructuring, exchanging loops, some functions" but not like thinking again etc.
Finally: Whether this is considered cheating (and if the assignment was "important enough" to consider some action "cheating") is up.to the prof and your university. You might want to ask them. If you don't want to, this most likely either means your prof is unreasonable or you yourself consider your action to be wrong.
I'll have to guess that you have crossed a line and that what you did isn't proper. Also, your tutor served you ill by doing your work for you rather than helping you understand enough that you could do it yourself.
But the bigger problem is that you have missed out on the opportunity to learn things that might be important to know. Reading someone else's program (or math proof) is nothing like doing it yourself. Even if you "understand" the result you haven't done the necessary reinforcement work that assures you have any real knowledge.
I think you have made a mistake and should work to avoid making it again in the future. One way would be to talk to the prof and say that you have a tutor who "wants to do too much" by way of providing solutions and asking for help in how to establish a plan that helps you learn. It doesn't mean, necessarily, working without a tutor, but the one you are working with now is missing some things about how learning really works. You owe it to yourself to do more.
A wise professor, in answering questions of students will often respond with a question for you instead of an answer. Or they will give a minimal hint that will point you in the right direction or bring you back from a misconception. That is the sort of guidance you really need.
So, no, it wasn't really ethical. If you work harder and avoid such things in future, you will learn more.
Whether it is cheating or not depends on the rules set for the course, but if the assignment was primarily about doing that particular programming task, then it almost certainly is.
The fact that you substantially modified it does not change this. The expectation is to come up with a solution given the problem, not given another solution. The latter is usually much easier than the former, since finding a solution from scratch would involve understanding the problem, extracting key information, coming up with a suitable algorithm, deciding what data structure to use, etc., all of which is already done if you see an existing solution. Depending on the goals of the course, some collaboration might be allowed. For example, if the focus is on implementation, you might be allowed to discuss solving strategies with others, but would be still expected to write the code yourself, without looking at those written by others.
There may be certain exceptions — for example, starting from an example discussed in class or provided in the course textbook would usually be acceptable, but that doesn't seem to apply in your case.