Avatar of krakatoa
krakatoa
Flag for United Kingdom of Great Britain and Northern Ireland asked on

What would be the approach to decrypting this.

Hi,

I put together a small encryption programme, and this would be the ciphertext that would be sent to the receiving peer. What method would you folk adopt for regaining the plaintext ? Thanks.

Jm'?RH←?+#'ä/ñn»³¸Pní?í?ï½Þõ+Ñ»§?¼¾b§»?â?v¢?½ û"?K?d?)ôîî&x!←Bõb»'è%åUi?Rý!← 3Ì'
B+ã?0?+ð*¾g÷ï;,¡,?/!B+²êSûoê*ø" ï:?L?‼? ?E?Â.xîn?¢?ó÷‼í∟¶!Ïö)? ]oÌJPå=▼ö↕Ö.ÍÍÿ?↔
_¾ÿ+QXA÷??6;Í?÷?îùê↓♫µ§ð¾êûmó¤¾?êüûîQ«ûÆzÉð9?(g?þÿ{?å↓Í ?♥?\?▬§♫☺ï«Û??Íî?7è& PR?
§??☻??Íåö§3↓"p ðáÝû?öÚ?|?/;►5¿3v'ó
s◄?→?♀?ïúm\þ»â1*9ï> ú?Ukó}®ÎØ?pì%_35☺#Ô%äǪ®¶H£½þëøçò¢$85↔ ÚôæX¾úñðø?äZ«Ó Px?ð?R
OÌ#Îæ?ª?ìÉ*QkÎ?C¦ì·4å­ëã?¬?ëÕ ­°?ï?þ?+æEûôpýþ?â3å@?éñ?âÎýù7â?#?↔µ?ü°þñöºªÖù*êí?×
K¶D«³§WàF϶P­SìhÕh$éSbwJõÏí¿&?@`?a?ty)w'?~Xs­yî?8?oÁ?ä?6Î#??Å?♠Éë♠ÔN4♠?I×àÓü?í:Å
ëKàqÝ?:??r?Ô6Å?ÇÈ;TÊE?ÌíD/@¤K­j?èÒè8ÈÈm?)D⌂D¼☺"Ñ?D?оL½!Â0Ï2Sî♠Ò▲$ÆÕ?·§.õ?r?À²ÏÒ
?Ð??Q?|[Í^3&;?"ÆÄRÄÂÕ?ÎSExJDP;n?£M ©¡Ð?^<VQ?▼W?_P OP♠ ←▼?☺7↔5▬x♥Ä?↨ºDvC>±þúü♫ì<C
♫Z^Q-B\¬Ôì|³gÏ®¶Ê[ÉS(\{MÎ‼ó5x7Ã;0aÇVÄoÅÒ?a‼?    WEmVnCçUÌâbªÖ¶sýÕ­ô±◄¥TëÒæÕÏÄб¹
«=úͨZ<J?▼¬ã:}ßgPQ®Ph▼|Ã[ZóGVÙQ®Àã?ÇÛÇÕ☼èPÌo?:§▲}'<> }b♠«0¤!???¶@§#°?å?Ç???]'?½5
?á?à?ÐFÓ)Ö4=/?`▲t?!Ë â?Ñm\`D$U?\?ÍÅÑÑm?d?Ç?¡&0râ7$↓?♫ÁÞçÖ↨ѳû<♣;W-IÞ??Pø◄ÐP?ihÆ$
ºëîî7jÿ]:×tÍî3¡µ?¤?ÐÀ? ?ö¶óª?ä°¢ÁÀ<ßרêA¨▬ýSzàFXF?ÆÛÍWÞò3$?¢)­¢1##n§/?j`cïn?ÏÜ?~
éÑ¡↓Ñ¢®Õ[DF¾®÷uÌTJM×:
'Ý?? õ&Í:?ÜÈÓ?ó?µG¤-1∟'¼t!<0#4s1
?♣ <?m?t????◄wÌuÖ=õÀ1►'a♂³?×???Â?S♫/?ÌÌOïÑ Â♫ñ?4Ã<?-Ò>Fä)?▼x .♥i☻1←Ùó?»þ´:;<G<0♠
uþ/±?ð?y?v?åÍËÊRVÄ?Â?u«Aºåºãu%[Nʱ?á&¨↕ôíø↨ð?±Âö?¦u ñ®õ$°☻ø3°3åÅÄÐ??Ó6b'?Ö?\#0,"
?~p'ýtÃâùÑþÓñÑ1?¶ÇäÊhÕåªþ?\+→♣♫D↑?ÅüH§Êäb?Ö?ÞÆ??ª¤«ô§?·>`vs3ãÕ¨@ä?ÿÑ\?  ?Eôò?ã?¶
07?:?/Nð[w^âb i9↕p38o∟0¶âY?▲Ì↑׳¡??Âd?ÍÀ♣Ã×÷@Â?/??ü·Êÿ©õ'÷?n5'÷?1¦0ì5♥t7?????,8"
ÔcX9L½J[[æótô=Ñ÷×.Û!?Ô?Àô˱Àn¿♠®↨íÆ¤?ñ»ú3ü"c2k♥Õ'Û7²♣|´²åÎôÛv?0?♥?w?y0↨Ó☼>¹??ÝÆÌ
?e?gýc&f?aò0ëcRmnÈ­a¬i¸q¾è,?¨l$Õ↔??▼?BPL7D,CwY°Ê·???→;_uá"x4x$áq«Û²ÂcÞØoÌ@?O¿Âú·
ú¦¨¶úàå%æ¯-8-ìa©?àßü|¥s?÷????!Ë▲?7?É?ÒÕ↓4=Ù63   Èô?,x?c?m³}*?ï10"1p⌂gx1*i cÇâ(go
?H??%Á-Ùx")ó2!1zdßã%ïÉì-á?í↨á4☻?>?¸?ì?®ê¡
»³áb¼h¸Âxß?b§j+♥%▼ßAÜñ+çdö=?,►2ÂxòÕýüýiéïE+↨æÐ61f-♥?♂+=2Éæ?Ã*!dÊ:ÔÇÄÒ??$?yÖh2*+ç
3EËhábÔ}?É5É/d?M?å?庱qç?öÖô+Þ,ýðQ?♣$ç̺Åe¢-    Eoß Ëj?y=ÆØÝeÚ??þVzÍxÎo¿ÖÝÔ8??Ò?
È×?bC↨ ´TñEõãé?§?é?hÎ*Ë?Óø=ôsoË#W2?6;{1dó~2i}l?o?¸y´ u¨Ê??;<??Íù6à??´#?s7qÑ8Ë►?+
?(*.b/yz{´8¯-´Å?Õoá%☻3É1Á*?f??×Ì?Î:⌂?d????g?cÒEÓý#øÒy?cØfÂ?n×À?Õ⌂çf2P8L:
~/±ÉgÈ⌂ðpµÐý??Û6æNýÈ!Ìy5e?Í?Á7*üdMzLØ¦Ì "☺⌂Yw(¯gË#?¶on%?45+
f►¦↓?MÄ7Øs+▲¤(q9Ðå×?Ù?ÆöÌ?ÁÈÅ?PÜ↔Ì*~?♂▲♫æåÛ{*?IÇ?"87.&-?-?DÕ%?òdØ" ▼Ø>@?^èDòC{11
>{;B nyq?Ã?Lz(▼¤äå>í<3ö(ìg?\¤FðHÄÙ'È◄?  7?7?.♣▬¶åó$ùbj←a♦Í"ü÷þ▼53$Î?ÝxÕ9)ZÈ↕y4nï
k»./,,Ëîb: 7? ¶(â`8AëWª3äâÇ5ÙQ@@{(?F?/?U?Ä·?½!¶Ü[4G(b4y¶'ñ)(4¶Ð▬h,¸Zâ↓å"???¶?ÙÕg
_Ï{k>+a▼♣LDQËb?ØÁ?ö¶þòþ·?ÿ?ÙÔGú;∟$Ù?ÌÈÛ8Ê?Æ;È?Ù♠¿x???=ú9å~ºZG?0Ù;?Î?d?¿)·Ñ°?ø¦ÞL
?C3-)(mUiò▬ª+9▬|âzõÊã¤ø£{¹?Î?CÐÕ??ÙÕ8?)±?³,öa▲?ÃÙ}*ö>???l¨?¿Ùþ3ú4&×<©?³"©?há)?+)
i=ßÂÄ?TÔÌ¡Êɽ?|s?sí·x{?ÃÂä?/?1?Õ·bÚ?N-??ÛßégëåÍ!h||Ñøö¨íúÚãÀù%:$ha:.?f?.Â↔ÎØ/9d'
m‼?▬·‼?È?|ÛìÂï=Aø/·Þöüþ♠ß?Ä?;Úr?ÉJØ?9ÃvÂÛ??↑Öý"$,?¨r´{♣`((É}¢1Í>??%?w?o¹Â·:iZ)Ý<
?×{?{IðXÃO0}=   ?vÄ☻ÈU&í?÷$G9☼kÚ???¥?èÈ?$Ï%?5♣Âÿz?57?hë7ù}8_8?>¦ï¹â³a,? ?iÊ◄ζëÛ
+?j\.9f)y♫ý ?ÛÝ`À♠☻ÏrÅçÂj*(♣ 8?É?)k;Ý~?►?)#83)}¼ì}îåòí}?/?.#÷?£Ìa?Û?LÈÛ?É?ÆíÞãÆ?
þ?ü{æ?jÛ/)>Ù|?⌂`dÚ~Ôy |Ò¹¶àÄÚ!?¡Ýß♠⌂?dä/ó▼~↔/?l?Þr{?sÞ0/*Å↓Â8☺#~g| Þ?Î?¹?¬?>ÁÁ??
?Õ:'?«÷.ý0øx?0?xj~`??¢Â¢j£ÐÏÞ?Ð?{qÑu?♣ÓÒ.?(,?y?û?µìöÎ⌂yt"~Ê?↓VMO♣ÿÜ?~⌂u2dÃyíd?0÷
~♂?l?►<*¹&a⌂~>nÿÀ*§⌂t:¿þ½?¶?óÑ?èõÜîTõ}k©*-&
 Éqî?Õ?Ý?û??_?P]?2?91º,?>Ìy~~pçh´1ÏÛÙlMw?f←*ûí¿»?A?♫.r1!è+£èêõ6|**k"~"z?qÝí?+Ý2¹
8¸⌂ú3;÷Iå↕?W0~c?y¿Ñ☺T   ~+íl:,5Bµ♀»♠@Â~Ù)Ö8º"Ét??§jéeû?É1Õû7♣⌂È"Úï⌂þ@KâYm]0▬Þ©yÝ
it}ÔïtL1{Ë→Ó?Ôê???U)cy@rebg D¶þ♀a⌂9,(÷¨¥⌂þ|úy⌂bgs)?ÁÀ?Æ Ãú9ò»©1U¶t←F
~?²Ý½(?õ?@µ     ♣♀‼@$ý:{4u»ý♣õ³?¬}´|uÍd?t‼vÖ/ÐH'!õ4u3=x>1)?s$fdZ1úãN♥OÚZÁ×~Ð@♫ðA
|±|q¶Âv«?¡?♦þAx?þ!ÿyÞc#*ðz???nF:dÝ♣Äyýe2>f$⌂8Ô,Ì♣ï-Îy?0☼`ß⌂?s?Ö?Úmm{|w♂↕???ß↨?Þ`
Û?$?9{Õ|¼¯↓í♣Ü♣q¶üó☼7Aî☼? f♫⌂aÐ2
‼r☻i↕½§?♦ó"çpÖÎÒÐ&&)0"↑¤&Ý6þ(?a?é⌂¼cU?ÛÈ◄@¼?|yÞ)æM©å    3?Ü(n(T{JÃP?Woz!ùÎÀþÒ}qb
:Ñ!òeÕ×ßÔ↔*Ù©©£²?>®↑½àZî~p3?    2a?f?o nu6¾_ÓU@↑♥Ð\♦KÃ2cë▬úfüqsü{|?3g ÿ|¨1ö3↕g¼ü
r`3rq#v3g@½ÐþpòuÏt¤<|Ã?¨ÀÔ½?p?~êIìyð)¾!♦n◄ùíåjÿ<?4Æ☼=♣WÐuÎ~Pû∟?♀?qpÑ+Ü&ðiWÐg?m+v
¤4Ðéêô¥?çr?x?Ê¥èGígéc C{mpbjxoI,♥ê▬♠♫a}♦?C.ÇßÍghvm☺r` 3`{kè`8⌂$&è²g}âz3ñu4{ÿ(þ♂s
>↑]pÔs?ë0ïgèrÿ;êµp²Ä¨♂?Kì)¾ÐÿgAdò1å%`4ov&Æ'♀dÀ{2♠TÜ1Ù9Ò¿↓ñ♣Ñ?¾`¾×ê?
 ♂i►}►ql}Üße?®¹þ·DÔ♣p×r!QÇ*?ïÚ☻o|tÅ!ti¯nsl!?jw`}k5dµ&«g±ÝÕ¾1]84=c/↑òdôh♂o5n6»"ü
?{O!'`"hw)D¥NCBhpxBp!ÇdgÃ×ßoÏRÚ`ßqILIGXWC?Ë?1?9üÅÊ?SýFþ CþCa♂4ö#B4ë}ZÁ←cÖ1ÌD%?¯w
!m♂sCb♠▬♫À"×?í p
♂Cu♂?Do▬úcìÅ/xÀcÀ♦fÝÊ[hL!I|JØ5w0¶qÚtßÚ$k?Ú1z|⌂ñbúdþ×ô
5◄pT♀?♠?►¾ps{?`A`♠}½ö×ê×◄!"6{b↕rÖÚ?←a♂×UñÄ¿AjP∟?y?2?gÏIÁB³p©?♠¿Âú`?ìp£ïìaÑ{÷9)=?
?¾gj{
Üqq?x
▬§☺ÓDÃ|↨bÃdÔým
♫X¶‼Ö=Á♥.#jÄ"ÐÕÂÃÂ↨!☻¼jàÊ?ÖvÐbmÄb¶☺?◄ÙÖ?!♫4yÜzÑWmÛ"xÐ7ÇÅÛmÀ£xÄQÓM♦[Ø⌂Ò¬ÀlF%élT*O
▬↨SÚ1ÝÎ?a6È??ÅI‼.♠qY$ÍaVÌbÊ?®*Ewt'Ú2ôØ# âÙîÚÚuN'☻Ãm?¸? ?¶p?    Ô<j=¯#jfu?Õ??▬É►
pÈkÝeÄ{?s{&◄Å♀;7?[;3▲f8bs§<Í~ÛOÕ¢?
;j c¼>¬6Úµ|õz²ÌÛ§T∟♥☻Á?YÝ­ÐÛd?a}↓/JÂPÍUyÁJyc;%zóÐë?:¬sÕN7♠ÙkQ?UÖ?iÇ}øëónpl/e+?¦Ö
:ǯ×q?+GâáÀlÄ1?Ú¦ÔrÎaÚ÷§♥x→1È1j?mÈ?5∟¶YÄÇ1Â↔`se¨q×if?qn¨vÇfÜ#"'Ø(EfxÛ%ÚÐ+Õ$◄v‼~
p ÐÚ♂¡Á°k¯µ3jM↕=ÕlÓ%a ¿?pxnlv7Ú?}?kßÍÙmÍ??a66*4!ȸ→ì8Þk←}‼:'
®_dÛ?¸9Gdhw0v¥5‼ÊýÍ?;Ó§aua)ÁÑWλÄÌ|Ö♦]Ï~o}ü$Ä$ÞvHÕ¶}HU↔g!q♣$×lgq&öÕ:ÚSdem?øËrdc8
_↨Ì     ∟♠t☻;←8PÏoCKËWÞ??ÞÐÖôÀ1],☺?S?ÕÅ?ÅÌÅ6±?Í?'H¯♠?À]©9uzgA.ÐÖÁ=9:¹rÇçÜ⌂GÓ.ßoF
:ÃÆ♣Úu ÒôÔi¶☼↕j▬iX?_|uÔº¬µoÒ"?hÓÐÞI    ?☻'☻¼♫ËSÑ­?tf:96&;j<ÐÊuA{v=%)5??Ý?↨Ù►?∟!
â¸9º/¿>Ñ~om"ph♥Ñ↓ü1×?Á*?ù?t?    ?\f▲k?'∟Ê⌂]<ÛÌnÍo?Yi×?♂ÉÇ?7Â7Ã?|?o?K?ÁïHùz?fh←tD
?→+u♣hÎÊÌÝ?ZÉHÊÅÖ&Û?Ö♂6?sg gÏÒkK'étèiËË?↑ÁSÍÍÍéGtÐ♥Çb*♣♦4!t»?&xö]ãihr?wG('⌂hutZÁ
^a`Ë?åg­m&Õ↓Äf▲Ç▬↔▲h↓ñ··→ÐS?è?zXgulbË'xb%s"*ª9↓1A6wl?Á¾iß:Î:A{lki`iÙýu⌂↨|7(ÔzËÛ?
ûÕÿn÷♣▼ÍQ®ÉÊÉ↔u¯Ó?ÏÖ?ÛØ¡?ÑÕÅ|dÜ8oáGÇ®?Ä?(?<S<?"?Øout<K:È6ÖÛÔ?ì=ï>;Êz←↓↓▼?Ík_&∟6Î
∟×IAÊytª=<?z?n>ßÊß?ÓÖÉ'Q♦<ÎrÁ?ÒÜÀÕÊ(Ìî<r?ça<jJ|8y}?W?GJ▼V*þ;'_Î1♦?&=0u~=o
?LißlmáʱJ×♣÷u☺¥►♥%♂$F¬¬ÊªÔ 5 È®?½t=v>=üxm mØïÉòÖØwð=K1ÃxƹÃqÇ3ØÕf§Ý<Ð~ÐÔ?ÚÕøa¶Ç
        n|⌂~?◄???åníK;♫Õ?&y-ÝÞ3ÞÃPÈÒgÇ⌂Î{ÉßÂ▼?jê9yg~.>±\Þ↕ÎbP³PúP:¬+uÕ{?t
®UÙ>Ì   ]µs³)±Õ~ßpÎ*'☺©CI►ud{fz/#5}@W{☼l*?LÞ?Þ?Ø?↕i→Q→= ♦o?x⌂?&♣        MzlÙ:h*∟
gv>♀k1c⌂♣?→z.;|îf­M¢f>?*Ï?ÅxÇ7õÇ?Ç,▬)‼yT?→♠T(⌂6Â{x?ni`⌂y9<?↕?▲?◄?∟→5 ¸?ÿ|h♂ë905y
-b<?5¤Wn̸#©Ó{Ïy"My↓♂ÈØ±??Õn ?Rq¸?©Ù|⌂Ü⌂T7▼+eÉPÓP< (Û)ZÙ-m¶(2pþéÀ↔Û}"Ù'kdÊ%ß1/Mv
O.e?)Û{mÎ7A     NÏ{`5?4lQ♂;♫?▬?♀Ù+ùoEFTybf=l¬?¶?NÂGÛ☻Ú?¯►Þb☺lijh`#?▼»ºº`zDzsfÞr?
?ð⌂?◄~?yc↨♀?♫T;?U◄♥D]ç.x;Qâ§4èck,?Ñ?Þ♦*▼♥@      cùAVܰe³7¶(ØiSNy?a,♠m‼y)a?xImÿ?ø
/âaÊ`ìxè(PÄ8♂p??c?É◄Ó§????ÜÒpsjjvk)IDAA\ÔG9Q DL♀        zÏ▼☻|L½☻}¬¢ »¾?/3fjnÜ?♥◄
¯Y↓^P"▲,_∟☻{qkÒºZQ.>↓8­?¸WL.Iá?Ú<'(¡Ì®♠▼@ùEóyJkè3¶{♣M   ÿ1å2?}S3♂?AÇ?   ?⌂/???Û?
ØÊîÌø©A´I2NQB?⌂4+?`Q-}%?=oÎ↔Ç×N§ -EÇkÌ♂ÇZ♂M<j↔*¦xok`Y{⌂4çIöyGt↓-\U§VT♥à♣t0;|W3/=
?n?x0yjk%?m♦K§mR£³Zy¥⌂Jc9-ÙS{ 3¹{▼0♥íØ³Ú-Ð∟\∟n,$§?↓?¼?-‼;▲◄§<Çq/0+pë▲?8R♥å³åPù¤á
?►`‼q♠M HH♫äI◄aJk¾↑¯c↨Qcø0¢xÚá▬?R|qbÞµsitá´ãûc²8×§♫{‼VZ<L?R§PÈ{Î@↕Vô'ð}5▬2´[⌂UEQ
►k°Bù«ò?K?↑?    ?.1+äb►ĦƥÉ2♣→▲K§♂³‼ß¶

Open in new window

EncryptionJava

Avatar of undefined
Last Comment
krakatoa

8/22/2022 - Mon
David Johnson, CD

you basically reverse the process .. showing the enciphered text has no value.
In this  day and age unless you are a specialist in cryptography you will  will not be successful in generating good ciphertext. Germany thought the enigma with the addition of additional wheels, and a plugboard was sufficient, history proves that it wasn't.

my suggestion is to use something like diffie helman aes
krakatoa

ASKER
How do you know what process it is you are hoping to reverse?
Qlemo

You don't. You apply social engineering, infect encrypting locations using trojans and spyware, etc. pp., to get hints. The more you know about the encryption alogirthms used, the easier it is. Asw soon as you get an idea, you might be able to use a weakness in the algorithm to improve your chances.

Without any knowledge, simplified brute-force e.g. with quantum computers can help.

The better the encryption algorithms used, and adding volatile keys like with Diffie Hellman, the more difficult 3rd party decryption is. But there might be secret ways (backdoors) to simplify decoding by secret services, goverments, or the really dark side of "business".
Your help has saved me hundreds of hours of internet surfing.
fblack61
David Johnson, CD

I put together a small encryption program You confused me.  I thought you wanted to make an encryption/decryption tool.  and not given a small encrypted file attempt to decrypt it.
The sample is too small to even think about decrypting it.  One needs hundreds of files  and some clues or a copy of the plaintext to build a decryption engine.
btan

To decrypt / decipher an encoded message, it is necessary to know the encryption used (or the encoding method, or the implemented cryptographic principle). Without knowing the technique chosen by the sender of the message, it is impossible to decrypt it (or decode it). Knowing the encryption (or encoding, or code) is therefore the first step to start the decryption (or decoding) process.

To recognize the type of encryption / encoding used to encrypt / encode a message, several cryptanalysis methods exist:
- frequency analysis: which characters of the message appear most often? in what proportion? which characters do not appear? This analysis can be carried out for all the characters (but often the letters A-Z and the numbers 0-9 allow to eliminate many methods of ciphers / coding). The analysis of bigrams or trigrams (or more generally group of letters) makes it possible to refine the cryptanalysis, the presence or absence of certain groups of letters are clues.
- the coincidence index: how random are the characters of the message? Intelligible messages (in English) tend to favor certain letters and do not use the E in the same way as the X (much rarer).
- signature search: certain ciphers / encodings have characteristic marks, a signature which makes it identifiable.

This tool did not surface an known format ... so should not be something common
 .. for info, the tool uses AI/Machine Learning technology to recognize over 25 common cipher types and encodings including: Caesar Cipher, Vigenère Cipher (including the autokey variant), Beaufort Cipher (including the autokey variant), Playfair Cipher, Two-Square/Double Playfair Cipher, Columnar Transposition Cipher, Bifid Cipher, Four-Square Cipher, Atbash Cipher ..

Don't think it is worthy if you want to just decrypt it w/o any clue (keys or method etc) to start with 
ASKER CERTIFIED SOLUTION
CEHJ

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
krakatoa

ASKER
Well, thanks everyone for the useful comments and links. Look, I'm not a cryptographer or cryptanalyst for sure, but my view on 'this matter' is that if the mash-up I posted above actually represents a valid English text (which it does, because I put it there), then why would anyone producing such ciphercode as that, be expected to give a third party cryptanalyst a leg-up by exposing *any* aspect of the encryption model that they used? I thought the secret-busting agencies implemented their art from a standing start, without any hand-holding ? I don't remember anyone ever saying that divulging your methods was a requirement for letting someone else break your code.

So the above gobbledegook is the on-the-wire encipherment of a valid passage of English (plain)text. (I'm not interested in data security on hardware, nor securing it from physical theft or other means of appropriation. My question here is limited to dealing only with the tokens whilst in transit over the 'net). So this boils down to 'someone' deciphering the above goulash, without any help from me. How would that be done. And if the answer is brute-force (which *seems* to be implied from David Johnson's post, wherein a request is implied for multiple samples to be obtained to narrow the serach space -understandably), then just how many such examples would be required to do that, and would that be the only way of ensuring a decryption ? Because the encrypted post is actually one time pad product.

⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
David Johnson, CD

A one time pad is unbreakable since it doesn't use a method to transform the plaintext to ciphertext
The disadvantage is that both ends must have the one time pad and if the pad is copied stolen then the messages can be decrypted.  
ciphers that have been broken have always used an algorithm and it is the similarities are its weakness. One of the flaws of the Enigma was that a letter could not be enciphered to itself. Meaning say the letter A when enciphered would never be an A in ciphertext
krakatoa

ASKER
Well, a method of some kind is always required to produce any sort of result for anything, let's face it, so I must say I'm not quite sure what you mean by that. But yes, the disadvantage is that both sides must possess the pad, which is a weakness, but the even greater weakness is the requirement to renew the pad every time you want to send a new message. So given the *concession* that by *some means or other* (and this does not mean simply by secure electronic transmission) the initial pads could be safeguarded and be held by both parties without suffering prior compromise, then what would be the routes to breaking an effectively renewable OTP ? My code allows A to be encrypted to A if that's how the dice fall, but the next A has almost no chance of being similarly encrypted, nor the next A in the next message.

Let me post the cryp output (as per my first) of a few paragraphs of 'A's.

Here it is :

AED☼Ió??U?????=U=?f?Ü7ÜfÜÜcccÉc?É?É;Éf?Ì?ÌffÌf¡fpfc¡cp♫p77Çc?cy?f?77ÌÇÌ?¡?fyfy³Ø
7Ø?ØuÌu¡u°u³u7?Ó?Ó§?7?7?♠§?§♫7♫?♫
N?6?6N6A6õ66õô6↨ôiô6ß6i66?6i?♫i?ii♫3♫???3ß?????i?♫?ii2?2Z◄i◄◄Ç◄ßÇyy?y??66??666}◄
◄◄==Ì=◄◄i◄ ◄i◄◄Î◄iait ¹iÞi6À6◄Þ²Þt°tâtDiD¹iÞÔ6♂à♂Þ
Þ¹6¹6¹i6iÞiÞÔ☼♂☼▬Q
Q6?♠E♠)♠ÞÞ:ÛOÛÉÞY☼hhhQZQlQhEh)3Þ?Þrú?úÞ:hOhY?Õ?h8hhÔþÔ=ZÌ◄Þ◄?l?3>3Þ?◄r◄?◄?◄?p?À?
◄??8¤h???=?9yÌh?h>Ë>?¡?¡♀◄¦p¦◄Þ◄?À?◄9☻9?£¤Þ??y·y?h·ËØË←ËÝ?Ý?►Þ☼♀á¦◄~Q◄‼◄"?"Ó99h9
í£á¢ì¢A¢R???á·á?%·9Ø9►8►8Ý►►[áká,Q?QkQkQ1‼↕"↕9eheááá?ì#A#R#5#ái%l%k8k►?[?,?,Ð?áO
ckcQfk►k{↕{áÏ?ª#áiálá?s?ß?‼?‼ÐæÐká‼á?c½c♀c¾áûá@f‼{´{àª÷á?s?ßàß‼¥

k

?
?
♀LáL¾k@ï‼ïàï?ïàï‼ï8kL?L?kCkk?÷?)?±?+k‼÷+÷8)]±]‼]+j]]]üjü]▲]b]$]6]?ü?▲?‼?b+à+$[P[
6;?d?q?u?¥?§?j+Æ+t[t?¨?}?ldlq?‼‼u¯;‼;j;?‼à‼♦j↕Æ↕¨↕;;}Æ}¿‼à‼*l@lB☺B?×?;¯Ø‼Ø⌂;j>?K
à↕♦↕§↕;Ç;à;àÆà‼;¿;à$~G~ã@ãBã2I;ÜØèØèØ↑Ø↕;ZKæKæÚæÇíÜj▼aàìàQò↕;QãQã;ãUÜãÜ7èg↕gèm↑?
↑m↕mZ,æ,í_j?ana;ì;Q;QÅ;¡;?Umããã|↕|mm????;?m↕?:,Ãmãmã_♠_m??n:.:Å☺¡☺??m:m`md?dã´m:
m↕?↕:l?¬?ï?á?~s~:#ã?ã%×mãããämä?::I☺? ?³»³m↨md↨dü:?:m:S¦B↕B¨$¨§¬X¬?ï?á?#?%üm?m_$?
ã?ä?äÅäâIâ»Tmmm?mâ½â↨âüÃ?????Æ?im?S?B?§l§=§?$Ï$â§lXÑ???Ò?â?×m×?×â×â§â¨T☼T§m®i§??
m?âàn³n®ââÃâ?â?âllÆliK?Kl§l?l∟jM=Q=â|âÏââ¶⌂¶ÑZÑ=ÒÿÒ?âuâåâW§¶§l§(¨+?+§+§+?=?_?å?>
®‼®¶®¢â¢âåâ?K=l?§?Lo??M?MoP­P+QÊS?SlS¢Suâu¶uZ¶=?ÿÛÿßÿß?ß0Þ0³0ã4DåDWç¶çlo(o+Û+º=¶
_¶>O‼û0ó0?¶Bå<?Y??=L??oå?å?ñoñ+ñÊå?ålcoc¢U¢?¶®¶?¶=u_uo♠a?a¶aßrßeå?å↨ß↨Þ?åoå}ã?ã↨
D?<oçoÛnÛÓÛ?¶?ºÕºhOhûäóäBäYäLäÿÔåÔåäcäopoÉ?É®É?É=ä_äaÛaÏCäCár²o?e©?←o←}ä?↨Ì↨↨☼?◄
? o n????åÓHfäf↨?↨Õ↨r↨ä*Ô.Ô↨w?wów?É?äÜä(ÛåÏåáM<M?n©O©ÂnÂn?←e←Ç←?­?↨?☼?◄? ?????å?
?ÊHoä▬←▬*▬.▬?▬ó▬8▬Ü^(äå?å?M¦M▬O▬ÂË­Â??oe eâe?n?Ǧ?????{?{???LÊÝ?Ý▬Ý^qpq?®?ð?[¦↕
¦▬▬▬Ëç▬↑­↔­ÿ?ÿoqn? ?â"â?â↕âçäç??¦▬?▬?>w??↕?↑{^{q? L>Ý?Ý>®h®?ð?↕?▬Z▬?ç>ç?↑£↑g?>?É
ç↓çjqj??"?ç??q↕>ç>▬>?£?q▬Ó↓æ>?>Ó??>?>^> ¦>¦?ô>¨hæZæ?q?@>æ>☻q☻qægÓgq>q>EÉ↓↓¹j→j??
?qº>♀>ï>?£?q@æ@§?§Ó'æ'æ>[¦pô.æÁ¼Á@?@Á☻ÁÓÁÕÁEÁ↓R¹T?T→?º÷æZ♀ZïZ@Z>Á>?>\§↓'n'5æææ5
pæ.æ?æÁ?R???÷???[i?i↓?↓æ↓æ↓sn↑5↑5☻5K?KiKËKæ¥æ¥sÙ↑Ù☻pK?¥?KÁÙËÙ?Ù pÁp↑?¶?Ú?Ú
ÁËÁæ
Á
ÁéÁ▼Ð↑↑ß↑KÚKÁÁ
Á▼°↑°ßÁá²Á²Á?²??$$↨$s↨sûûKûLLLúLÁK@Á@@ÁÁ?T9T??F9KFK?KÀ?↑À_L__ÀÀ?ÀSÀ?À???À<ÀJK<K 
Kééé???È?À<ªJ☺J←<☺ À sé×éÀ§è?sÈ}ªÀªï☺s☺³←G☺s☺J☺¹Õ¹sJ×JÀ♀è♀sþ}þïþ³?³←À?À"G"I"¹è¹r
??Jr?&♀&þ&?J¾û←???"←èQèÀrÀrÀJ0Jrû??←←?←?←rQ?0èrè?m?mJ←rnr?è?è?mÃ←Ã?Ã?w?9?8?r?è??
?MÃMw?wn9←rÐrèrèj¥:r:Ä?rM©MÙl←l♂??←zÐz¥→r→Ä⌂©⌂Ù⌂♂r?r→r⌂rr←r→r#←#→ö→Y#r#↑?Ãr→rírM
rír1↑1→M→u→UíMMMí$?V?MM9Mëc?U?M?$ë$→→?→w→i→MMMë{?{?{?→=nü?ü→→→?→?♥w♥Â♣i♣MuÂu{?n?
☺Â☺®u♫►♫µuL é ↓↔↓ë↓ôë↔¸¶LëÂë?ë♫ê ?↔∟↔Âõ?õ↔õòôò↔ê¶↔¶öë9ë???∟?▲?ñÂ↔?↔↔òLê↔D↔↔↔öLÂL
?L?uÂ2ÂL↔Å↔?↔f↔LN9?t??LXL>LnLÑSÑuÃ2ÃL¢Å¢f↔fw9wtÉtÅtytLêL>«ê?n?tL?ÝÃÝ¢ÝwL?ÌÉÌÅty?
y¡«ê«t?tLçL§L©ÝLLêÌ?Ì↔t↔?ì?t¡~♥?t?ê?ųÅâŶÅçÅt©MLOêê?#?↕?ê↔'↔∟tW~∟?∟ÅøÅ?âOtO¶ÅêÅ
tÅM? ∟ê1ê?∟P∟U∟O↕%ê?ê?'∟'Å'*WO∟Oø?[íO^M^?t∟t?tP£OwO4%4?4?O∟¦∟í?wÅ{ÅÅ*}Owí?^?£∟wÓ
4O4íOíííwíÅíwí?w?∟?OÓ?ÓÄÓÊ♥ÊÕÊwO¦¾ÇOO?? ?ÓºOĵʵ¾µÏµ µÓÄOÔOéµNµíÄ
ÔÄwÄé?éî¸îíAí¶í∟Ä∟▼VîVN∟Äë¶ë∟w∟ww,wÄ,```Ä3ÄNNNõõ÷ÄÄ÷'ÄÄÄÄ'jÄjÄjÄjlÄ/lN?3??/Â3w3t
ÂNw?w?t?N8?8▼??oNw8ÎoÎw???ì?▼s▼???r?▼?▼▼N▼ìr    r?▼ØNÄ  Äì??vØv?♫??v¡♫◄♫v¡v◄Õ◄äv
?Õ?▼▼▼×äväv▼¦v¦¦?¹?ìììíNíìí▼N!NNìN▼N▼?▼N▼F▼v!ÇNÇC▼N▲§Q?CGCF?FvFìvìÇV▼V▲v▲+C+?+vú
v?ì?v?v?+,úì?ì?ì,ì,?ììì????QQQYvYQv:v?v=vÇQÇ:Õ?vQv=¥ÇvÕ▲v{¥{v?vl¦l{l▲?▲s?sQïÇ Çr
Dz?y?ïÇ ÇØsØïíïQ y ?▲?r@yE²?²´¦´ï▬      QyQy¹í▲Q        ⌂?⌂?y?±ü?▲▲▲E?E??S´y´V?H
?ïQ←Qƹ?¹?      ?? ↑y?y▲ ▲7▲7¼?¼[?+?]?sîsSÆSyy7y7y!V!?!ï8←8Æ?Æy?y?y▲?▲± yyy Æy¥7
?7?7»7»[»PÚ+Ú]yy♀s♀ÆPwÆwÎyã7ãï☻7!!´vxv×!K!K8K?K¬Ky!î!±Jy¿Ò¿¥Æ?Æ?Æ»!?@Ú@y§♀§P÷Pæ♀
!♀!Æ!!!P!☻X!P´]xüxP!PKa?î??KÉKPK?!?JSÆS¿úÆlÆ?Æ2ß2@2§2P5÷î÷x?xæyVx!xP?]?!8ü?P?a a
Salî?î☺î☺?☺É ?xPÅPu?É???ª?ñSªS ú?î⌂îñl !↨?x?S??!?x♂5ñîñx¬xSx¿?¿??8 ? ?x xSxl¯?É?
↕??☺{ {ÁIÅIuI ? PÉS?S?&SÈñ+ññ ñ?ý⌂ýµý↨ñ↨{x{©<»<?þ?0♂{ñ?ñȬñSñ?ñìÈ < ?  x?xñÉ É¤↕
È?d⌂ñõñÈÈ↨<ð<♠?♠?♠ñ¶ñÈȶ¤#{IwIÙÈÙøiøÊ{¥<ÈSÈ{¶{ñ0«{

Open in new window


David Johnson, CD

A One time pad is simply that ONE TIME USE if you have 1 page of say 2048 characters and reuse the pad for each message then eventually the pad will be disclosed.  A one time pad is NEVER reusable or letter frequency analysis will eventually disclose its secrets.
As I mentioned in the first answer.. Cryptography is HARD it is actually a separate branch of mathematics. All it takes is one mistake to make it breakable.
I started with Experts Exchange in 2004 and it's been a mainstay of my professional computing life since. It helped me launch a career as a programmer / Oracle data analyst
William Peck
krakatoa

ASKER
Yep. I get that. And for that reason my code remakes the pads *in camera*. No pad is ever re-used.
krakatoa

ASKER
Eventually, all encoding can be broken; understood. But in the meantime something can come along which delays that process for long enough to be significant. In my estimation, this is one such candidate; because even if you have the programme that encrypted the plaintext and decrypted it, you wouldn't be able to recover the plaintext a second or subsequent time, even using the programme itself, because the pads would have been incrementally destroyed,  as each character of the message was exchanged between peers. That's not additional wheels, but new wheels altogether.

If 'you' do Java, then 'you' are welcome to try the code yoursel(f)(ves). You need two JVMs running, two spaces on your hard drive somewhere to keep the two arrays as files, and the rest should be explained in the narrative at the top here, and anything else can be asked. (The new pads are not saved to disk, even though they are altered in RAM in the programme, because this isn't a necessary proof step - but 'you' can add the serialisation in, if you wish, and if you code in Java).

There are a couple of ready-to-run plaintexts embedded in the code already. The non-commented-out one is the plaintext for the cryp in my first post. Everytime you run it, it will yield a different ciphertext, which mimicks the behaviour aimed for in a use-case field scenario without that extra save to disk I mentioned above holding the amended arrays.

And finally, for now at least, if you use an initial message of say, the length of the Bible, that space (although you must never exceed it in subsequent messages of course) is substantial enough to go a very long way in terms of longevity. I don't recall Enigma's median message length, but it was short in comparison.

/*
ROPE = Replenishable Onetime Pad Encipherment.

An 'updateable' One-Time Pad, maintained on two peers by
an array of zeros and ones, (randomly generated in advance of use), and an array of integers, (randomly generated in advance of use), the latter being altered programmatically, in the same ratios, on both peers. **

The mutate() method operates by altering the "salt" values in the array, - "NsWorkingIntegerArray" -  which it uses to XOR the value of each individually-transmitted char with the salt value found in the array. "NsWorkingIntegerArray" is the working copy of the "NsBaseIntegerArray" series.

To obtain something like a random lookup of that "salt" series, the number of noughts (or ones) encountered in the noughts and ones set - "OnesAndZerosArray" - up to any current 'sent-char count', is used to retrieve the value at that index position from the salt array. The number held there is then mutated  after transmission and receipt at both ends, using an identical mutator value, so that future lookups ingest different values for their salt. **

The zeros and ones array could in future be used in an authorisation handshake, but presently is used solely to index into the salt array.
As users would be expected to be sending different messages, rather than repeatedly the same one, a significant extra degree of entropy is also leveraged. Repeated characters in any given plaintext, are unlikely to see repeated ciphers produced, due to the mutation of the salt matrix and the high exponentiation of the noughts and ones' array configuration. Short messages producing low entropy noughts and ones' matrices, would use a fixed-length (probably 53) array exponent, leveraging over 9 quadrillion combinations of zeros and ones. This fixed-length table safety-net-of-an-array is not included in this codebase. **

NB : Launch the 'server' (receiver) first with  : java ROPE

Launch the 'sender' (client) second in a separate JVM with : java ROPE send

Define your own space and titles for the two array matrixes files which need to be held on disk.

** Code would need to be added to save the mutated salt integer array to disk. Currently, this programme only functions from a 'cold' start.

NB : This programme runs its short life as a Thread, a fact which is immaterial to its function. Threading is present from a former testing process, the code of which is now removed.



*/

import java.net.Socket ;
import java.net.ServerSocket ;
import java.io.PrintWriter ;
import java.io.BufferedWriter ;
import java.io.BufferedReader ;
import java.io.OutputStream ;
import java.io.InputStream ;
import java.io.ObjectInputStream ;
import java.io.ObjectOutputStream ;
import java.io.FileOutputStream ;
import java.io.FileInputStream ;
import java.io.OutputStreamWriter ;
import java.io.InputStreamReader ;
import java.io.File ;
import java.util.Vector ;
import java.util.HashSet ;
import java.util.Random ;
import java.util.concurrent.Executors ;
import java.util.concurrent.ExecutorService ;
import java.util.stream.IntStream ;



 class ROPE implements Runnable{

        private ServerSocket serversocket ;
        private Socket serversclientsocket ;
        private Socket sendersocket ;
        
        private InputStream inputstream ;
        private OutputStream outputstream ;
        private PrintWriter pW ;
        private BufferedReader bR ;
        
        private File O1nes ;
        private File nums ;
        
        private ExecutorService executorService ;
       
        private Random random ;
        private Integer[] NsBaseIntegerArray ;
        private Integer[] NsWorkingIntegerArray ; 
        private Vector<? extends Object> OnesAndZerosArray ;
        
        private boolean sender = false ;
        private int noughtsgone ;
        private int onesgone ;
        
        private final int UPPERBOUNDINFLATOR = 13 ; // Arbitrary amplifier for the salt table upper bound.  
        private final int STREAMLOWERBOUND = 47 ; // Lowest acceptable salt bound.
        private final int CHARSETMODULUS = 256 ; // 1112064 ; // var to set charset wraparound.
        private final int LOWB = 10; // 10 // var to limit lowest salt value. (The 'base' var is equivalent to starting salt).
        
        private int base ;  // Original (starting) salt value.
        private int propu ; // Proposed upper and lower salt mutations.
        private int propl ; //               ".
        private int propbig ; //             ".
        private int propsmall ; //           ".
        
                   
                
        //private String plaintext = "Meet me on the corner when the lights are coming on and I'll be there, I promise I'll be there" ;
        
              
        
        private String plaintext = "In his seminal 1927 paper The quantum theory of the emission and absorption of radiation, Dirac coined the term quantum electrodynamics (QED), a theory that adds upon the terms describing the free electromagnetic field an additional interaction term between electric current density and the electromagnetic vector potential. Using first-order perturbation theory, he successfully explained the phenomenon of spontaneous emission. According to the uncertainty principle in quantum mechanics, quantum harmonic oscillators cannot remain stationary, but they have a non-zero minimum energy and must always be oscillating, even in the lowest energy state (the ground state). Therefore, even in a perfect vacuum, there remains an oscillating electromagnetic field having zero-point energy. It is this quantum fluctuation of electromagnetic fields in the vacuum that stimulates the spontaneous emission of radiation by electrons in atoms. Dirac's theory was hugely successful in explaining both the emission and absorption of radiation by atoms by applying second-order perturbation theory, it was able to account for the scattering of photons, resonance fluorescence, as well as non-relativistic Compton scattering. Nonetheless, the application of higher-order perturbation theory was plagued with problematic infinities in calculations.[6]:71        In his seminal 1927 paper The quantum theory of the emission and absorption of radiation, Dirac coined the term quantum electrodynamics (QED), a theory that adds upon the terms describing the free electromagnetic field an additional interaction term between electric current density and the electromagnetic vector potential. Using first-order perturbation theory, he successfully explained the phenomenon of spontaneous emission. According to the uncertainty principle in quantum mechanics, quantum harmonic oscillators cannot remain stationary, but they have a non-zero minimum energy and must always be oscillating, even in the lowest energy state (the ground state). Therefore, even in a perfect vacuum, there remains an oscillating electromagnetic field having zero-point energy. It is this quantum fluctuation of electromagnetic fields in the vacuum that stimulates the spontaneous emission of radiation by electrons in atoms. Dirac's theory was hugely successful in explaining both the emission and absorption of radiation by atoms by applying second-order perturbation theory, it was able to account for the scattering of photons, resonance fluorescence, as well as non-relativistic Compton scattering. Nonetheless, the application of higher-order perturbation theory was plagued with problematic infinities in calculations.[6]:71      In his seminal 1927 paper The quantum theory of the emission and absorption of radiation, Dirac coined the term quantum electrodynamics (QED), a theory that adds upon the terms describing the free electromagnetic field an additional interaction term between electric current density and the electromagnetic vector potential. Using first-order perturbation theory, he successfully explained the phenomenon of spontaneous emission. According to the uncertainty principle in quantum mechanics, quantum harmonic oscillators cannot remain stationary, but they have a non-zero minimum energy and must always be oscillating, even in the lowest energy state (the ground state). Therefore, even in a perfect vacuum, there remains an oscillating electromagnetic field having zero-point energy. It is this quantum fluctuation of electromagnetic fields in the vacuum that stimulates the spontaneous emission of radiation by electrons in atoms. Dirac's theory was hugely successful in explaining both the emission and absorption of radiation by atoms by applying second-order perturbation theory, it was able to account for the scattering of photons, resonance fluorescence, as well as non-relativistic Compton scattering. Nonetheless, the application of higher-order perturbation theory was plagued with problematic infinities in calculations.[6]:71 In his seminal 1927 paper The quantum theory of the emission and absorption of radiation, Dirac coined the term quantum electrodynamics (QED), a theory that adds upon the terms describing the free electromagnetic field an additional interaction term between electric current density and the electromagnetic vector potential. Using first-order perturbation theory, he successfully explained the phenomenon of spontaneous emission. According to the uncertainty principle in quantum mechanics, quantum harmonic oscillators cannot remain stationary, but they have a non-zero minimum energy and must always be oscillating, even in the lowest energy state (the ground state). Therefore, even in a perfect vacuum, there remains an oscillating electromagnetic field having zero-point energy. It is this quantum fluctuation of electromagnetic fields in the vacuum that stimulates the spontaneous emission of radiation by electrons in atoms. Dirac's theory was hugely successful in explaining both the emission and absorption of radiation by atoms by applying second-order perturbation theory, it was able to account for the scattering of photons, resonance fluorescence, as well as non-relativistic Compton scattering. Nonetheless, the application of higher-order perturbation theory was plagued with problematic infinities in calculations.[6]:71      In his seminal 1927 paper The quantum theory of the emission and absorption of radiation, Dirac coined the term quantum electrodynamics (QED), a theory that adds upon the terms describing the free electromagnetic field an additional interaction term between electric current density and the electromagnetic vector potential. Using first-order perturbation theory, he successfully explained the phenomenon of spontaneous emission. According to the uncertainty principle in quantum mechanics, quantum harmonic oscillators cannot remain stationary, but they have a non-zero minimum energy and must always be oscillating, even in the lowest energy state (the ground state). Therefore, even in a perfect vacuum, there remains an oscillating electromagnetic field having zero-point energy. It is this quantum fluctuation of electromagnetic fields in the vacuum that stimulates the spontaneous emission of radiation by electrons in atoms. Dirac's theory was hugely successful in explaining both the emission and absorption of radiation by atoms by applying second-order perturbation theory, it was able to account for the scattering of photons, resonance fluorescence, as well as non-relativistic Compton scattering. Nonetheless, the application of higher-order perturbation theory was plagued with problematic infinities in calculations.[6]:71";

                   
        private final int MSGLENGTH = plaintext.length();
              
        
        public static void main(String[] args){
                   
                    
            ROPE otp = new ROPE(args) ;
            
            /* DEBUG            
            System.out.println("\n Expected level of protection is \n\n "+((long)Math.pow(2,otp.MSGLENGTH))+"\n\n and the recommended minimum is\n\n "+ (long)Math.pow(2,53)+"\n\n");
            System.out.println(otp.MSGLENGTH);
            */
            
            /* DEBUG
            for(int y=0;y<otp.NsWorkingIntegerArray.length;y++){System.out.print(otp.NsWorkingIntegerArray[y]+" ");}
            */
            
            
            /*
            System.out.println();
            System.out.println();
            */
            
            
            /* INFO
            System.out.println("If the length of your message is equal to, or longer than, 63 characters, the chances of an outsider guessing your uniquely-generated table of 0s and 1s, is less than 1 in 9 quadrillion. This is at least the largest degree of unpredictability possible on a non-quantum computer. Your present message is in fact "+otp.MSGLENGTH+" characters long.\n\n");try{Thread.sleep(2000);}catch(Exception eea){}
            //9223372036854775807 (is more than 9 quadrillion).
            */
            
            
            /*DEBUG
              for(int y=0;y<otp.OnesAndZerosArray.size();y++){System.out.print(otp.OnesAndZerosArray.get(y)+" ");}
            
              System.out.println("\n\n"+"Message length is "+otp.plaintext.length());
              System.out.println("\n"+otp.NsWorkingIntegerArray.length+ "    "+otp.OnesAndZerosArray.size()) ;
            */
                  
        }
        
                
        private ROPE (String[] args){
        
            this.random = new Random();
                        
            this.sender = args.length > 0? args[0].equalsIgnoreCase("send")?true:false:false ;   

            if(!this.sender){setupServer();}
            else{setupSender();}
               
        }

        
        public void run(){
        
            if(!sender){
            
            int incounter = 0 ;
            int c;
            boolean ok;
                                   
                    try{
                        
                        StringBuilder sb = new StringBuilder();
                    
                        while(! ((c=(bR.read()))==-1)) {
                        
                            for(int y = 0;y<incounter+1;y++){if(OnesAndZerosArray.get(y).equals("0")){noughtsgone++;}else{onesgone++;}}
                        
                            char t = decipher(((char)c),noughtsgone,onesgone,incounter%2);
                            
                            noughtsgone = 0; onesgone = 0 ;
                            
                            sb.append(t);
                            
                            ok = mutate(incounter);
                            
                            /* DEBUG
                                System.out.println(NsBaseIntegerArray[incounter]+" server "+NsWorkingIntegerArray[incounter]+" ") ;
                            */
                            
                            incounter++;
                               
                        }
                        
                        System.out.print(sb.toString()); // The result - back in plaintext.
                                                
                        
                    }catch(Exception inxs){inxs.printStackTrace();}
                      
            }
            
            
            else {
            
                    
                    boolean ok = false ;
                    
                    int charcount = 0 ;
                    
                    StringBuilder csb = new StringBuilder();
                                        
                    char[] cipherFuel = plaintext.toCharArray() ;
                    
                     
                    for(char c : cipherFuel ){
                            for(int y = 0;y<charcount+1;y++){if(OnesAndZerosArray.get(y).equals("0")){noughtsgone++;}else{onesgone++;}}
                            
                            /*DEBUG
                              System.out.println(noughtsgone+ " "+ onesgone);
                            */
                            
                            char en = encipher(c,noughtsgone,onesgone,charcount%2) ;
                            csb.append(en);
                            
                                                      
                            pW.write(en);
                            
                            noughtsgone = 0; onesgone = 0 ;
                            ok = mutate(charcount);
                            
                            /* DEBUG
                                System.out.println(NsBaseIntegerArray[charcount]+" client "+NsWorkingIntegerArray[charcount]+" ") ;
                            */
                            
                            charcount++;
                    }
                    
                    ///*DEBUG
                       System.out.println(csb.toString()); // The encrypted message.
                    //*/
                    
                    pW.close();                 
                    
            }
                
        }
        
        
        private Integer[] makeNsArray(){
        
                IntStream stream;        
                HashSet<Integer> hset = new HashSet<>();
                
                stream = random.ints(STREAMLOWERBOUND,(MSGLENGTH+STREAMLOWERBOUND)*UPPERBOUNDINFLATOR).distinct().limit(MSGLENGTH);  
                stream.forEach(integer -> hset.add(integer));
                Integer[] i = new Integer[hset.size()] ; 
                
                i = hset.toArray(i);  
                
            return i;
            
        }
        
        
        private Vector<Object> makeOnesAndZerosArray(){
        
                IntStream stream;
                Vector<Object> vs = new Vector<Object>(MSGLENGTH);
            
                stream = random.ints(0,2).limit(MSGLENGTH);
                stream.forEach(integer -> vs.add(Integer.valueOf(integer).toString()));
                    
            return vs;
        
        }
        
        private void setupServer(){
        
            try{
            
                O1nes = new File("C:/EE_Q_CODE/01s.txt" ) ; //Put names and locations for your two key files in these two lines.
                nums = new File("C:/EE_Q_CODE/nums.txt") ;  //Put names and locations for your two key files in these two lines.
                
                this.OnesAndZerosArray = makeOnesAndZerosArray();
                
                save (O1nes, this.OnesAndZerosArray) ;
                
                this.NsBaseIntegerArray = makeNsArray() ;
                
                save (nums, this.NsBaseIntegerArray) ;
                
                recover(O1nes) ;
                recover(nums) ; 
                
                serversocket = new ServerSocket(30000) ;
                serversclientsocket = serversocket.accept();
                inputstream = serversclientsocket.getInputStream();
                outputstream = serversclientsocket.getOutputStream();
                
                pW = new PrintWriter(new OutputStreamWriter(outputstream, "UTF-8"), true);
                
                
                bR = new BufferedReader(new InputStreamReader(inputstream, "UTF-8"));
                   
                executorService = Executors.newFixedThreadPool(1) ; 
                executorService.submit(this) ;
                executorService.shutdown();
                
            }catch(Exception ssexcept){}
        }
        
        
        private void setupSender(){
        
            try{
            
                recover(O1nes = new File("C:/EE_Q_CODE/01s.txt")) ;
                recover(nums = new File("C:/EE_Q_CODE/nums.txt")) ;
            
                sendersocket = new Socket("localhost",30000) ; // Define your actual remote host and port here.
                inputstream = sendersocket.getInputStream();
                outputstream = sendersocket.getOutputStream();
                
                pW = new PrintWriter(new OutputStreamWriter(outputstream, "UTF-8"), true);
                
                
                bR = new BufferedReader(new InputStreamReader(inputstream, "UTF-8"));
                
                executorService = Executors.newFixedThreadPool(1) ; 
                executorService.submit(this) ;
                executorService.shutdown();
               
            }catch(Exception clexcept){}
        
        }
        
        
        private char decipher(char ch, int noughts, int ones, int countmod){
        
            int unsalt ;
            char dechar ;
            int decharint = (int)ch ;
            
            if(countmod == 0){
            
                unsalt = NsWorkingIntegerArray[noughts]%CHARSETMODULUS ;
                
                decharint = (unsalt^decharint) ;
                
                dechar = (char)decharint ;
            }
            
            else{
            
                unsalt = NsWorkingIntegerArray[ones]%CHARSETMODULUS ; 
                
                decharint = (unsalt^decharint) ;
                
                dechar = (char) decharint ;
                
                
            }
            
            /*DEBUG
               System.out.println("noughtsgone = "+noughts+" onesgone = "+ones); 
               System.out.println(dechar); 
            */
                    
            return dechar ;
              
        }
        
        
        private char encipher(char ch, int noughts, int ones, int countmod ){
        
            int salt ;
            char cichar ;
            int cicharint = (int)ch ;
            
            if(countmod == 0){
            
                salt = NsWorkingIntegerArray[noughts]%CHARSETMODULUS;
                
                cicharint = salt^cicharint ; 
                
                cichar = (char) cicharint ;
            }
            
            else{
            
                salt = NsWorkingIntegerArray[ones]%CHARSETMODULUS ;
                
                cicharint = salt^cicharint ; 
                
                cichar = (char)cicharint ;
                
            }
            
            /* DEBUG//
              System.out.println("noughtsgone = "+noughts+" onesgone = "+ones); //DEBUG
              System.out.println(cichar); //DEBUG
            *///
            
            return cichar ;
        
        }
                     
               
        
        private boolean save(File f, Object o){
                   
         try
         
            (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f))) //TWR
            
         {
            if(o instanceof Vector){
            
                out.writeObject(((Vector)o));
            }
            
            else{out.writeObject(o) ;}
            
                       
            
        }catch(Exception saveex){}
            
            return true ;
        
        }
        
        
        
        private boolean recover (File f) {
                         
        try
        
            (ObjectInputStream in = new ObjectInputStream(new FileInputStream(f))) //TWR 
        {
        
            
            if(f.getName().equals("01s.txt")){
            
                
                
                this.OnesAndZerosArray = (Vector<? extends Object>)(in.readObject());
                 
                 
                /*DEBUG//             
                  for (Object s : this.OnesAndZerosArray) {
                    System.out.print(s + " ");  
                 }
                 System.out.println();
               *///
                
            }
            
            
            if(f.getName().equals("nums.txt")){
            
                this.NsBaseIntegerArray = (Integer[])in.readObject();
                this.NsWorkingIntegerArray =  this.NsBaseIntegerArray.clone(); 

                /*DEBUG 
                   for (int i : this.NsWorkingIntegerArray) {
                     System.out.print(i + " ");
                   }
                */
            }
            
        
        }catch(Exception recoverex){recoverex.printStackTrace();}
        
            return true ;
        
        }



        private boolean mutate(int index){
                
            
            base = NsBaseIntegerArray[index] ;
            
            propu = base * 27/100 ; // 27
            
            propl = base * 13/100 ; // 13
            
            propbig = (int)(propu *1.7) ; //1.7
            
            propsmall = (int) (propl *0.037) ; //0.037
            
            if(index%2==0){
            
                if(propbig > base){
                
                    NsWorkingIntegerArray[index] = base ;
                        /*DEBUG
                            System.out.println("RESET-H") ;
                        */
                    return false ;
                }
                
                else{
                    NsWorkingIntegerArray[index] = propbig ;
                        /*DEBUG
                            System.out.println("MUTATED-H") ;
                        */
                    return true ;
                }
                
            }

            else{
            
                if(propsmall < LOWB){
                    
                    NsWorkingIntegerArray[index] = base ;
                        /*DEBUG
                            System.out.println("RESET-L") ;
                        */
                    return false ;
                }
                
                else{
                
                    NsWorkingIntegerArray[index] = propsmall ;
                        /*DEBUG
                            System.out.println("MUTATED-L") ;
                        */
                    return true ;
                
                }
            }
           
        }
    
 } 
 

Open in new window




David Johnson, CD

As I said before a one time pad is unbreakable if used correctly.
1. the pad must only be used ONCE
2. the pad must be long enough to contain the entire message
normally in the preamble you will have the message # which will translate to the pad page
to encipher
ABCDEFGHIJKLMNO
OANCMDLEKFJGIHZ
ZYBAQWERTYIOUPF

 EMGOZ  -- HEL    since we already used the L in the first line we have
 to go to the next line and look for the O  and then look up voila L
and Z is O -- HELLO

Next message will use a new page as the page is only ever used once per message
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
krakatoa

ASKER
Yes, that is how a traditional OTP would have been applied. The digital equivalent, with further procedures, is inherent in the above code.
Scott Fell

I have no idea how to answer your question. What caught my eye was your follow-up comment, " My question here is limited to dealing only with the tokens whilst in transit over the 'net)."  

If this is for a web token for something like authorization, wouldn't you want to use a one-way hash?  Or did you mean something else?
btan

Can be hard for OTP to work without knowing the key shared. Unlikely to break.

I think to do the keyless part, taking the hardness of breaking as cryptanalysis is separate topic, it is likely use of XOR with a predetermined sequence of encoding per se without any key. Below is one way of dealing with it. 

https://en.m.wikipedia.org/wiki/All-or-nothing_transform

I thought there is good discussion in this related topic. The short of it is not so much on hardness but finding an invertible means to get back with some known secret. My 2cts

https://crypto.stackexchange.com/questions/57701/does-keyless-encryption-exist

Experts Exchange is like having an extremely knowledgeable team sitting and waiting for your call. Couldn't do my job half as well as I do without it!
James Murphy
krakatoa

ASKER
I have no idea how to answer your question.  

Oh dear, well that's not a good start. ; )

The programme is intended for sending and receiving messages over a network, and the OTP-like manner of doing such. I'm not concerned with other means of cribbing, stealing or obtaining the code and or keys. Only the characters' time on the wire as secure entities is of interest.
d-glitch

What is your goal in all this?  
  • Do you plan to use this to protect your own information, or to market it to other users?
  • What is the value of the protected information?  What is the cost of an interception?

Are you familiar with Bruce Schiener?  And his Law:
    https://www.schneier.com/blog/archives/2011/04/schneiers_law.html

And especially his Memo to an Amateur Cipher Designer?
    https://www.schneier.com/crypto-gram/archives/1998/1015.html#cipherdesign

Bruce Schiener is definitely familiar with you.  Every sentence, every word in his memo applies here.

  • One-Time-Pads are the gold standard for ciphers.  Cumbersome to use, but provably secure.  But, if you are using a computer to generate yours, it really isn't a OTP.
  • Modern Cryptography relies on open algorithms and secret keys for a number of reasons.  (OTP's are one example.)  You are insisting on a secret algorithm, but then talking about it.  
  • Security is a system: hardware, software, algorithms, keys, and key distribution.  And don't forget the humans.  You don't get to define the boundaries because malefactors won't play by your rules.
dpearson

A one time pad is clearly a secure encryption method.  They're generally not practical due to the challenge of exchanging the pad.

However, your approach could be made even more interesting if you used just a little of the OTP to send a very large message.

If you think about how https works, the initial handshake is the tricky part requiring certificate verification in order to pass an initial secure key between the parties.  Once that initial key is passed, then that unique key is used for the rest of that session.

If you had a OTP you could use it for just the initial key passing.  Then once both sides have a unique key, that key can be used for a standard encryption algorithm and the rest should be very secure and of arbitrary length (solving the basic problem of a OTP).

Essentially the https model but without the need for a certificate authority - the OTP takes it's place.  That's a bit like the difference between your bank and a blockchain solution - you've removed the need for a central authority.  Pretty cool.
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
krakatoa

ASKER
@d-glitch 

Funny you should mention Mr Schneier . . . I had actually seen his comments previously yes indeed. And I daresay he's right, given his broad and deep knowledge of this landscape.

I think when it comes to your bullet point questions about an application . . . well, there isn't really one that I had in mind particularly, other than establish how hard or otherwise it is to protect tokens whilst in transit, and in such a way as to make their identity unhelpful in any subsequent re-passing analysis dependent on them. In the end, it'll boil down to how malleable the maths is that is involved in re-configuring the arrays. I'm not a mathematician, (I'm not a fireman either, but I'd know what to do with a bucket of water if my sofa was on fire), but iianm the direction of what I propose is somehow asymptotic, and will at some stage become ultimately analysable. But it's a question of just how long that would take to discover . . . and by that time, the message could well have outlived its usefulness to a cryptanalyst. As Doug P points out (and thanks for joining in on this Doug), there could be some spin-off as he mentions where the algo in the code posted above could serve a useful purpose.

So it's all academic at the moment, unless and until someone can show how much needs to be thrown at it to completely discredit the security I'm talking about. And that, in this thread at least, has only been theoretically mooted. The proof can ever only be a plaintext retrieval of any successfully-sent cryp.

(Thnx for those links too, btan).
d-glitch

I'm not a fireman either, but I know that sometimes a bucket of water is the wrong thing to put on a fire.

>> The proof can ever only be a plaintext retrieval of any successfully-sent cryp.

I think you have that exactly backwards. The professional cryptographer knows how ciphers are attacked, and proves his algorithm is secure against every known attack before going public.  Mr Schneier lists some typical attacks in his book Practical Cryptography [Sec 3.6]
    https://www.schneier.com/books/practical-cryptography-toc

I think Mr Schneier's view would be: Lack of interest in your cipher should not be interpreted as proof of its security.
krakatoa

ASKER
My fire and water comment was of course a rude metaphor. Sorry if the forensics didn't match your thresholds. ; )

Mr Schneier not being here to fight his corner leaves a fair amount of hearsay in your promotion of his principles; but yes, as I already said, he has massive insight into these matters. But just as a government agency would never admit or deny their ability to make or break ciphers, what we have here is simply a bunch of Java code producing a series of encrypted characters, which are later decrypted by a complementary but secret process. This doesn't make it immune to criticisms from your professional cryptographers, but what it does do is ask whether they or anyone else can show - materially and not simply theoretically - that the cryp can be played back in the clear. You say it can, in the right hands, but that's just a statement, and only a statement. Try the code on your machine . . . see what you think for yourself. 
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
dpearson

A secret process for encryption is concerned one of the first unreasonable standards in a modern solution.  Because now you need to not just secure the message but also the process - which is usually much harder to keep secret.

So in the modern world, you need a process that is public.

If the process is secret, then I will also propose an equivalent cypher.  I've thought of a secret phrase.  I wrote it down.  To decode it you should look at the phrase that I wrote down.  It's 500 characters long.  It's encrypts to a single character "X". Can you guess it?
No of course not, because it relies on the process remaining secret.
krakatoa

ASKER
No of course not, because it relies on the process remaining secret.
Yes.
Still, that wasn't my primary goal. The goal is whether the process is sufficient to secure the token in transit. I do understand the myriad other pitfalls and beartraps surrounding encryption, not least of all the means of keeping secrets secret and not obtained by others, but I am not concerned really with that aspect of security (as important as it is) in this question - reason being no-one has managed to come up with a universal answer to all the vulnerabilities, and I'm not going to do that either. But a single exchange of enciphered material that cannot be decrypted with absolute certainty, and in a reasonable time frame is enough to reach the goal.

I suppose what I could do, is to offer, let's say, US$100 to the person who could offer up the plaintext of a cryptogram I post here.

krakatoa

ASKER
Elsewhere on EE they're having fun swapping favourite pop star choices etc. This is the equivalent fun pursuit here  :  -

Guess the meta to this lump of ciphers  :

J3vv `nSÐBBÕ^BV♀··Z£v←²^b^aßq3E¨J+¼4Tb*aa◄♀F£♠HN←O↓D#4 F_TSF`♫JZ♫G­♫?ZÁO]K▼x/▬?B
ç'ýçHýóUO¼☺23gÜÏ4ÅÊ⌂ÎoÂ;?^.+&^=}){I4!G-8}}Î3É/[|xZ9▬qÎc?,«m£
♦D?·²¶??棲►Y?Z³GSLê↓]µ▲4→·³ùuF½♀IèD÷♀TI©♠∟a¨1¶?←?ML¯^75Ç?MLZC^X▼á9E?↨C♂L÷?¼¶kIF
Dêý1öÏ)Ý(?eÑ-t×p?HÝ♦?pt}5ËyÇ;.´►Ú#z×5]5_5↓E5Çz♥♥M}pÎ{Ñ♠tÈ♦)IØU♂O►Xż$|1«?t
Bkú5?
?↨☻8bQ!y*i"7-%/g<m?i;*↔nQy*5äp?p1ÞElÐ0?wN{JqBsÂ?w?OßM HÝXN3☼¶F<Ô►6♂`☺dKD+K??#ÑK▲
←[F362O⌂­7»b68bCD;
w^Dw    êFq↑%WMzPQ«▲?[X▬ÇFEº6ôÄ?fXy¸K¸áoae~B?
[d▲òBçPq_§iÊÿ½P KE^↨0♂?$⌂!çËE♂♠E#'5
[FC}?
♣C[F£h¦?{→7c[Y[¢☼ç♥7«vµrøR½âX?LrrdQ►Z¶^*▼K☼R-ëÂ÷BZF³¥Þ5æ7çx?¨??Ny
{ÚR?±o♫y?~?*FÎ5?ùÓ½yñ?³$Ál¹k¾☼?§FÂ?↑'JGÜÉÔEJEÆvÙz♠z♂↑sÇ;♣^lßÁ?ÂÒvv7^sêG?♀?Ô♦Ü ^Q
K¼^►Î‼¤l▲?☻?⌂Ź?lÅ
?^u^s?8v‼?½?[HM_s~µj¬Qã­ 8Dl▲[♀ I?_¡KHIU♫Z½Mµ   'ü7EXDóôº?îS?L#k8_òG♂í♦ó»ôv}8üvù
!♂h[EMãJE{N←_@[js       m&A¨EaQ{<+▲/9V»¹¢▼2Zq#+3Xa?´¾íT0X@♫♣§♀a $a6)  õ?5V¤♣⌂X¶♫
☺î→¬ò?5 2↓/:5u¢ø¦,IB?ô??[Û^?\7¾7B?↓&?:ï!00Ö6ò#?b4o☻↑¯:Ê&♫wÅI!Ö4nsCGØØÂutNBxo­,↔c
:♦ÑqÕ?zÄ4♀ui}?????ÆAÊ7?ÓZä]U]'Õ☼6←♀P¯I▬AlIN| Ys ▼2↑]]♀►®G☻0z}qIy#v~5E,'b«,&bµ¸wá
;?ªi~<¤‼G[±‼\Ov±Ã¹?§?N?ì¹hü??$?wb?+ô?ê;?m?iÃ;)?,Í(ñnbÙ4ÁÁv;3v?8?%Þr"}?.q"oc<Ú/☺u
Y↕E¿.¥W↓N♣·TùI"_Å7âc:N<Jw°#ùU6K?&?►?Î?K.!"∟wÉ#d??C)\?↔Ý]←TÂ?ÊDÞÏW?-'.È-Î**a0ÜÆV?
F♂♦#♀►▲?◄ÄRÄ∟ÒRQJTT;↑(j

Open in new window

 Or, of course, if you can actually decrypt it, so much the better. No money this time. Just a warmup. Answers by . . . a week today ?
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
krakatoa

ASKER
Have there been any decryption attempts since we last spoke?
dpearson

I would bet the answer is
"Mp"
which is encrypted using the complicated "shift one character right on a standard QWERTY keyboard" encryption algorithm :)

krakatoa

ASKER
I'm quite tempted to accept your comment as my answer . . . ;) 
This is the best money I have ever spent. I cannot not tell you how many times these folks have saved my bacon. I learn so much from the contributors.
rwheeler23
d-glitch

Rcvraarmy. Qtpnsaau yjr nrdy smdert upi vpiaf rcqrvy.
dpearson

Oh no - now I've really started something :)

krakatoa

ASKER
X2¬ml>.

(The . is not encrypted btw). 
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
krakatoa

ASKER
Look, it's getting past my bedtime now, and we really need to get on with this decode. So here is ciphertext again for the same plaintext as earlier. *Do* remember - you've got the actual source code, so do use it - you might be able to obtain the same ciphertext as this one, - just a matter of time, so don't give up ! :)

Ob~☺∟↨3►S☺áH♥Vv?JÛg`/ÐB?¸^b^oZ#áS¨☼BT{¶ªa¯K♀
zm!aPXB♫§¦âB®
K`
t¶=ä<È®OïZKxçÌnS3øïU S4?qUø#Hz@B¿÷ò¥ìEâ ïªä¶◄­q«←­?K?­?Ȭl?←
U'?OZ? T"NÁëÛýÜ®{ñ.0{ã4¬Ô☻Ò??}Ú4M?.Rq?4)~Ö16|:U:?< <¦#§bi×X#AÚIß
R¶}♦|»zp}¿b®⌂­?ë{↑Så∟FIlKü♀·♠ù☻>+pu<D~í↑♠ö♠w►¦↨æ·p#[¦_WQc?ò?♦Y/O¹âp"|<p$9ãá#¤z&?
"JC»ï?pãU%→×?PP∟ù?®?8a? |►Ó?↨p♣$ºeÏy↕?´Ð♫$ 9?aÙ♠?N))<ÂjÊ58∟-N◄w▼↕↕p}z♀f"♥5g,aA▼x
}H}îF?,!G©N▼wRÍߨ↓³→←♦♦▲♂
►§☺T↨»☺¥§ì½O÷D♂?¦Ã?5ÄeaeõüO½H_Jz⌂^wIUGZ ^TÔ*T,b/I▬#     ?Øq±a?5Ö'$uÃ8aÃk<(G5
o$?l?$!0I2É?w?0?ßYO*9X=
◄Ò▬E
Á ÅFH&  ?H5
↑*↓4= 6!Ûl´$¢↓ã⌂I6∟YEw◄ã_¯Fí☺?UR"UD
^▲\§#   qF>?6


~>úS[UÂS~▬xEw¢AA´¨Ã?8?Âbd0x▬{⌂@@;\<~▼0ß&±&ù▼ûË×ôEøê¶¨÷r? ?r?;↨FçQ¸+í´uw▬F!Ï>:⌂L1
)
7.r¶qAeF°C¡r·áz7♠ìz!l^x¾♥XF­U©JY♂cG?7! ?÷r Î↓|^ø▼RD^ûcN{Y▼zôÆæ:ó&♂~ê7?d[^<¶ú?♣¤v
♂3E¸⌂­5s §5‼§þ  ül♂K♂▬          *l♦♂?G?Ú?MðØöMÐ☼Åv♂y?hO
☼X~B1Qr[♣¢Â÷Æí?>uFØsV'M³r¥♦³M`·@²☼*?&l♥´‼g¶`¶sSpV§▲ät♫´Jl?ì'¢?D?¾?A‼FN\??'Ïl²2`:
ú5ÿv?oJ?Ot!8_z→∟$?$$2?8D☻♀%8"1oA%_'☻?♠9_|rËv8,y =9IzCfZ↕v☻`N!~/-`·t▲l@e4f1+[DMy`
ý&ÙüÌÁCëXyX↑↔Y♂^`C▲♀¸
v→?↓u☻Ư?ã?ú?IÆ????a t▬ËfÿÙ?õ?²?Ôì? ???=ë'?,?5cÆ6:9:.t,L%HnD>jea???ÕÞlx?ÒaX&(c▬(
↔}[;?u"pmrº♂☻ ♠♠E9BwJu<9‼k_↔→¿0jBI5☺Qt2B@♀a♦²]B<}→:B?G↓F↔A¶5]wQBÆ^ú⌂þRawñZu???³Z
0à?a?õiç=?îÑsç:<?Ö4Zv(#%?ug!    &?ô-nbl'h&Þ±:×2?7?Ñ↕A☻4♠B↔b1*♥0↑>$b"77×v☺F>y[♫!⌂
♫?↔$u@gÔ¯Ê%G9⌂ïI¡?·v"¥v;▬=↕;▲ZW~zh¹C\ò´½[ò«♣§¡JçþJ%☼C♀☻H_J_Q    YKQàT°↔♥G☻VA®F1ì
õ9?{¿↕ðð♦¿☼ê&Îb♀Æ♠v$?ÌÒ?♠♠~p↑∟Â∟dÃ?7+Í?0ÊÇ&;8~vhf|☼?+0.áx娤Èíhá↕¤@mmim''♂zx:ÿ6*
<o☼r¢oJj­%±?§pu0;n;3n,▲65↕.c$▬¾♀¯←1þ#↨▼rcàcÔ)±þ♠râææâÑ÷¬ê°??·0­??[¤§!"?w?Y§[6[2»
_h▬ûúCuÄnºz"ìmI8ÔjwujØ>c>&;4k ?←/; À7Y-Är ;7♥'♣?;▼$♫Í4▲?ä♦8☼ÝØ66%uÀrÊ►
×☼K3`\E

Open in new window

Let me know when anyone wants to cry Uncle. ; )
krakatoa

ASKER
To bring a modicum of relief to interested parties, here is the plaintext that no-one has yet decrypted.

private String plaintext = "Here's the same message several times over. Can you tell me what it is at all. It's not very long - probably shorter than a WW2 Enigma transmission, but to make it easier for you, it's self-replicating within itself. Good luck one and all. Here's the same message several times over. Can you tell me what it is at all. It's not very long - probably shorter than a WW2 Enigma transmission, but to make it easier for you, it's self-replicating within itself. Good luck one and all. Here's the same message several times over. Can you tell me what it is at all. It's not very long - probably shorter than a WW2 Enigma transmission, but to make it easier for you, it's self-replicating within itself. Good luck one and all. Here's the same message several times over. Can you tell me what it is at all. It's not very long - probably shorter than a WW2 Enigma transmission, but to make it easier for you, it's self-replicating within itself. Good luck one and all. Here's the same message several times over. Can you tell me what it is at all. It's not very long - probably shorter than a WW2 Enigma transmission, but to make it easier for you, it's self-replicating within itself. Good luck one and all. Here's the same message several times over. Can you tell me what it is at all. It's not very long - probably shorter than a WW2 Enigma transmission, but to make it easier for you, it's self-replicating within itself. Good luck one and all. Here's the same message several times over. Can you tell me what it is at all. It's not very long - probably shorter than a WW2 Enigma transmission, but to make it easier for you, it's self-replicating within itself. Good luck one and all.";

Open in new window

It should now be trivial to break the encryption model, given that you now have the plaintext *and* the encrypted version, *and* the algo itself. : )
dpearson

But not all problems that can be solved, should be solved.

Those are my words of wisdom for today :)

Thinking of the Enigma engine, if you've never seen "The Imitation Game" about Turing and Enigma, rent it today.  One of the best movies ever.

My second pearl of wisdom for the day.  I'd better stop now :)

Doug
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
krakatoa

ASKER
Yup. Seen it several times.

Of course, if Bletchley Park had believed (the unspoken hype) that Enigma was unbreakable, then it would likely have remained unbroken. But they didn't. In the same way, unless someone can show a means to recover the plaintext from any amount of encryption posts of the same text I, or anyone else, put on this thread, then it remains . . . as far as I can see . . . .   unbroken..

But not all problems that can be solved, should be solved.

So I only have your word for it that it can be. And in that sense, if I asked someone for an investment in my business, they'd probably ask for a contract of some kind to protect them. If I believe in your premise that it can be broken, then the contract I'd like to see signed would be that you'd supply some proof.  ; )
dpearson

Ah but another piece of true wisdom I learned when working as a contractor is that you should only sign contacts with people who you already trust.

Contracts are in most cases not legally enforceable (when on the small scale between individuals) because the legal costs exceed the potential return.

So that's my third piece of wisdom for today :). Trust is the most important quality in a relationship.
krakatoa

ASKER
Yup. I’ll tell my wife what she unwittingly let herself in for, as soon as the right moment arrives.
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.