This is working as expected for keys containing only printable text, but the input is being rejected if longer than 2148 characters, while the string being hashed is limited to 2148 bytes, which can be shorter than the input string if it contains codepoints above 127. I went back to check v7.71 again, and the 612 limit was bytes not a $len.

Keeping the limit at 2148 bytes is fine, though it would be great if it triggers the bad parm error instead of truncating.

Below is a slight modification of the original alias which also lets you specify the string from which %i characters are taken.

* The 1st command's key contains only from the 1-127 codepoint range and rejects the string longer than 2148 before it starts repeating
* The 2nd command's key contains only from the 128-2047 codepoint range, and shows the ciphertext repeating once the length exceeds 1074 characters = 2148 bytes
* The 3rd command's key contains only from the 2048+ codepoint range, and shows the ciphertext repeating once the length exceeds 716, and the repeating pattern is the result of hashing a string that's been truncated in the middle of the 3-byte UTF8 encoding of a text character.

Code
//blowfish612 2140 $str($chr(  77),4000)
//blowfish612 1065 $str($chr(2047),4000)
//blowfish612  705 $str($chr(2048),4000)

alias blowfish612 {
  var %i $iif($version <= 7.51,246,$iif($version < 7.56,46,$iif($version < 7.72,602,2140))) , %j 1, %string $str(abcdefghij,400) , %prev
  if ($1) var %i $1 | if ($2) var %string $2
  while (%j isnum 1-20) {
    var %key $left(%string,%i)
    var %a $encode(Message,mcir,%key,Fixed_IV) , %b $encode(Message,mcs,%key,SameSalt)
    var %line %a %b $&
      $decode(%          a,mcir,%key,Fixed_IV) $decode(          %b,mcs,%key,SameSalt)
    echo $iif(%line === %prev,4) -ag %i : %line
    var %prev %line | inc %i | inc %j
  }
}