I know how to pick a random number but not a random Char
Ah, but you do. You just don't realize that you do.
First, what is a string? Just a sequence of individual characters associated with each other by being part of a string variable. Each character is just a number in a byte (normal fonts) or word (Unicode fonts). BUT until they are expressed via a font-based display mechanism, they are just numbers in a sequence of variables identifiable from each other by a positional number and all of them are of type CHARACTER.
Take a look at your Hebrew Character font using Font Viewer. When you hover on a proper character, you see a character number in the tool tip. Usually, the letters of any font are arranged to avoid gaps. I don't know what Font you are using, but I found Hebrew in the Unicode "Narkisim" Font on my system. In that font, Alef is character x05D0, Bet is x05D1, ..., Shin is x05E9, and Tav is x05EA. That is a span of 27 characters in that font - with no gaps. The special diacritical markers for vowel sounds are outside that range.
For that font, your functional character range is the 27 values from x05D0 (1488 decimal) to x05EA (1514 decimal). Not that different from ASCII, really, where upper-case A is x041 (65 decimal) and Z comes 25 letters after A.
For this situation, you want to use the random number generator to build a number from 1488 to 1514, a span of 27. Something like "RndNum = FIX(RND(27)) + 1488" because of course Rnd(x) gives you a random number from 0 to x-1.
All you need to do then is take the original string and do a "Mid(X, pos, size) = Chr(RndNum)" and you have obscured the original character. The only wrinkle is whether you had a non-Unicode font for your Hebrew characters because that contributes to whether you have bytes or words for each character. But normally Access should take care of that fine point for you. And the reason you use CHR(x) is simple. It is a type conversion, just like CLng(x) gives you X in a longword. Chr(x) gives you x in a character.