That's a tricky one. Both are what they call adversative conjunctions in Romanian linguistics.
Însă is very similar to dar (also an adversative conjunction) and they can be used interchangeably in most contexts (though not in all of them). Their role is to contradict expectations, as shown in the sentence above: Sunt mic, însă/ dar sunt puternic. (you wouldn't expect a small person to be strong). As a native speaker, I can tell you that însă is perceived as being somewhat more formal than dar and you may hear it less often in everyday Romanian.
Ci is only used after a negative sentence or part of a sentence and it expresses a strong correction. Its usual English translation is also but, which makes it even more difficult to grasp. Ci simply replaces something wrong with something right. A few examples:
Nu l-am văzut pe el, ci pe ea. (I didn't see him but her.)
Nu e târziu, ci devreme. (It's not late but early.)
Nu sunt înaltă, (ci) port pantofi cu toc. (I'm not tall, I'm wearing high heels.)
[In the last example, ci can be omitted because it is followed by a verb; it may not be translated in English.]
I hope this helps.
Excellent explanation Adrian. I can speak for everyone who reads this and day we appreciate it greatly.
Thanks a lot!! With your explanation I realize that in Spanish we have a similar word (maybe it helps to Spanish learners) which is "SINO".
The word "ci" usually follows after a negative clause and is used to express something contrary to that clause. Ex: "Eu nu sunt scund, ci înalt." = "I am not short but tall."
The word "însă" introduces an additional remark about a previous clause, and that remark is usually contrary to expectation. Ex: "Sunt mic, însă sunt puternic." = "I am small, but I am strong."