Source Encryption

The program CP0105R uses the bindable API CEERAN0 to encrypt source. An array of upper and lower case letters is shuffled (now using a Fisher-Yates (aka Knuth) shuffle), and the BIF %XLATE is used to perform a simple substitution encryption upon the source file. When run upon itself, the result is:


      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      * * "tS ux'R RaCuXwz, xkLX zjC wXji ux'R HfussuPEDfL!"            * *
      * *                                                               * *
      * * NDoHiV OMOlcObcV Ok yyy.bHlcclpyOHV.iDG                       * *
      * * zBXJJXa QGeRBcBXDRD (yvy MUBXD VyGns) (M)2008                 * *
      * *                                                               * *
      * * sfnk mpiA nk rnvoRkoU jRUoi V xioVJnSo xpttpRk                * *
      * * KssBgRusgyF-nyFdyccVBagZM-ILZBVKMgSV bgaVFtV:                 * *
      * * YZZs://hfmSZypmhKPPKHR.Kfw/UyhmHRmR/DE-Hh-RS/3.0/UmwSUhKam    * *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      * *                                                               * *
      * * *             bHYUcq OqahqU NRcUmyXBHR J1.00                * * *
      * *                                                               * *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                                   *
      *  zuHB JqEcqIC iHll RGMqkJh I BENqMR KHlR, NhHlHPHGc OFFgpsj0 IGb  *
      *  %IkTMA. yGA KAAr DK T LEio ewMA eDfTow LDAkr gDMG T zTkiA        *
      *  idCsddf (zfxIyrzqd) 0 (t'00000000') Gfw 2 147 483 646            *
      *  (F'7kkkkkkR').                                                   *
      *                                                                   *
      *  vwJz VbiFbuk Jz CWzJFcWC Ui bNc iHWb ziNbjW XJfWz yJUw fWcFUwz   *
      *  tvrlvvV 13 PVI 240 (XQXrvp ToporX).                              *
      *                                                                   *
      *  zc AGJ, cXgAAZig DcGAbg nZOg, VJi bVOO. zc gJbAqMw, bVOO tZwW    *
      *  pRzF w oKkfiT mwqwgzKq fI 'u'; zf TKkqGmz, 'y'                   *
      *                                                                   *
      *  XyWwrF siZhg HWa aZ0105W                                         *
      *  Pall PA0105d (H'075iMD15' 'N')                                   *
      *  HCdd HZ0105w (y'075pnt15' 't')                                   *
      *                                                                   *
      *  !bDf'E PDoWZE zDMo jZZb!                                         *
      *  EHYvvYT gAZdHXHYldl Yl AzZ HdlXzAlYavd GzH vzlZ lddJl/lzhHNd.    *
      *  Ewz bPn gUf OZCQUQTF ZzgCmzZ rwyu urhLL, Qhr D gUf'r.            *
      *                                                                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                                   *
      *    Tlrolkn lRjifirE Hro                                           *
      *    --------------------                                           *
      *                                                                   *
      *   nIHR       yIHorR TZ kRwbqbTQ                                   *
      *   ---------- --------------------------------------------------   *
      *   2008/05/28 dhjYnbh cFByyYh sTkF GTcFhi-Knkhc nYZriTkFW          *
      *                                                                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     w ADETBEbzs(*Np) kBEbzs(*rkJJfz) QdAZiz('Yr2Su')
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                                   *
      * ... CSOFM ...                                                     *
      *                                                                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     RjnuYw     YR   R  240        Gjql
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                                   *
      * ... BZqSECNZE twOEZkfSEv ...                                      *
      *                                                                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *
      * ... gArsT SArgseKBgj ...
      *
     bwq0105j          qj
     C uppC                          10U 0
     A FtBZjvRB                       1U
     tmM0105G          MV
     N hHHN                          10a 0
     x VlgwaRTg                       1D
      *
      * ... cKDRQTKc (QsiKDsfY) ...
      *
     t UUMHoJG         JH
      *
      * ... kxprAkHG nctLGrFcGZ ...
      *
     t TuktGn          NT                  CQVBTGe('YCCWrj0')
     C                               10c 0
     l                                8C
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                                   *
      * ... Jhuh luLpdupLOl ...                                           *
      *                                                                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     V PzrKpVZ         VZ           240
     R  MKTRwd                      228
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                                   *
      * ... kEeiaeuCig febDexugk ...                                      *
      *                                                                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     G QwLeQFFMbG      L             52    rwy('hvPHUxVarXKTqAYBkzWgdjIutp+
     m                                          wIbmnZAzUCWlydRcLtDVfOhJgS')
     C loNjjXiC        l                   hcfi(NgloNjjXiC)
     M                                     eXV('FxfZSoPGeClbQyRWtUOgdBcEpk+
     S                                          mKQSOcwCVpvqUkDuzfyxWsjoiL')
     c dujL            t                   PSWV(BCtqBddyVc) KJtVc(dujL@)
     s RY              c                   CPaf(VdcnVKKGfs) gDcfs(RY@)
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                                   *
      * ... UGjbyKjyb ...                                                 *
      *                                                                   *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     T HEfApQX         j                   'H'
     B EQVOqPx         t                   'E'
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      * *                                                               * *
      * * *                        shRjARjm                           * * *
      * *                                                               * *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      /gWUU
       *qjAh = *fj;
       pjLW nxVZR nxVZRWo;
       nOp (zOW %BOD(oaGkW));

          iimfpvd();

          CIomjy UGILj UGILjoi;
          puaD vUQid vUQidDx;
       LaFwX;
       sxhiIj;

       gpjlq *KRVlu;
          //
          // KQQN hI 0 TKQK lFt; whw-CQcChNTvHEZQ
          //
          ji ( QLLm = 0 );
             gvve = 1;
          uTISj;

          QC ( CThHdsnh = OhHYkDd );
             Ilkm@ = %Fxxl(pJjVpIITWx);
             cd@   = %BFFl(knojjpfF);
          QjZo;
             tC@   = %Koom(nqFanNNzfo);
             cRFo@ = %fQQR(xMbccvgQ);
          mKoVX;
       WRmNo;
      /hYU-gEhh
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      * *                                                               * *
      * * *                       xgzlOipgOV                          * * *
      * *                                                               * *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     N oowMFNp         z
     o                 wi

     P eIDyzMH         d              8e
     r $Z              E              5B 0
     T $R              c              5Z 0
     o FUQP            G              1q
      /yerr

       // YucDDJy cYzxn Oxcdu ajXzjxd iD tzYuyX-hjazY jJniXzduS

       zUk $F = %Jdc(QcWGQvvwdI) mUTchU 2;
          evKuiC(kPPu:lJivLPe);
          $b = DRgPieS * $p + 1;
          GN ($G <> $k);
             ycGN = %TqYky(kXqZZLcS:$n:1);
             %zkjBW(BNkssbrg:$l:1) = %zkjBW(BNkssbrg:$n:1);
             %YbJmd(mUbBBocw:$h:1) = dcyu;
          DuWMd;
       WioXZb;

       // qptHycF/uqtHycF QbrpX %oYUFq

       DXPbBv = %gSvBA( EXYI : BY : DXPbBv : 13 );

       BaAZCG;
      /YHe-xVYY
     t uuRrztW         l

For reasons I can't entirely explain, this tickles me to no end.



The following link takes you to the source code, written in beautiful /free ILE/RPG. The source is distributed under a creative commons license.

cp0105r - Source Encryption


Valid HTML 3.2! Creative Commons License

BrilligWare/ chris@pando.org / revised May 2008