From 150841a778f6aefce5523521885e75b8b4d3ef23 Mon Sep 17 00:00:00 2001 From: rMilRowan <147142112+rMilRowan@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:48:32 -0500 Subject: [PATCH] Add files via upload --- Project3-main/Project3/bin/module-info.class | Bin 0 -> 147 bytes Project3-main/Project3/bin/v1/Person.class | Bin 0 -> 2776 bytes Project3-main/Project3/bin/v1/RSA.class | Bin 0 -> 3412 bytes Project3-main/Project3/src/module-info.java | 2 + Project3-main/Project3/src/v1/Person.java | 51 ++++++++ Project3-main/Project3/src/v1/RSA.java | 128 +++++++++++++++++++ 6 files changed, 181 insertions(+) create mode 100644 Project3-main/Project3/bin/module-info.class create mode 100644 Project3-main/Project3/bin/v1/Person.class create mode 100644 Project3-main/Project3/bin/v1/RSA.class create mode 100644 Project3-main/Project3/src/module-info.java create mode 100644 Project3-main/Project3/src/v1/Person.java create mode 100644 Project3-main/Project3/src/v1/RSA.java diff --git a/Project3-main/Project3/bin/module-info.class b/Project3-main/Project3/bin/module-info.class new file mode 100644 index 0000000000000000000000000000000000000000..ac966f65e708725c2bf952dc243c42cddf3998d8 GIT binary patch literal 147 zcmX^0Z`VEs1_o;eE_MbcMh5QO{FKt1RNc(Hw0uSeuHgLAqU2P!%$!t41_2}~y{yEt zL`DWSU$AOn26jdUj)0>4tkmQZV_^nPMg~rh0==Zf;?xEP21cL-5WvL13}i4durRO! QX)y*iurN?_1DF9J0N%tLmjD0& literal 0 HcmV?d00001 diff --git a/Project3-main/Project3/bin/v1/Person.class b/Project3-main/Project3/bin/v1/Person.class new file mode 100644 index 0000000000000000000000000000000000000000..0f067073bbe180f09e7a629455add3835f35da35 GIT binary patch literal 2776 zcmbVNTXz#x7~Q8$G9evkEu>n?CD0aqnzoOzkGl3*hSW6#f=FFMzvcLW9@62z1U%v?;gR2S} z1lBC>PM_2r*R~Xd1X|8(i(1;$thw}wne%$y6A(JDEUzN3fn z#;NJ7f{g;}eGp~OFw;Yhqb=nO*NdSYn>5sI@NLmi7cnptIaaw@_tm|Q*(oE{Cv>R42f+v{R^&DNJ zUOSSNcs?7!ZkkN;W2Ti;a8$*UI7U9TQpsEza)YwF>%3;mR$fXrJ>j!*wDOv1LKZm% zPYFC&?PgsH6=OI~eH67);43g(VbsTSugI%lmcS~wn{X1R6gxR9s+y!!X&hl3Miyw89^tuQ@EVor z^o!o4W>Px!20v@cv<9GcqQ>-2LwEV&t$&(YPV4Cp@x<6`Cn$vY!sZ^nW zG79?PA7a7waM>^mx)XzrO;WOkifAC&1r;VJ6xAfb6ZRfCRUGhmy$~zGrN6DBgcn&q z6{A~JWB)2MQY+#*1XQyQ&ZCF2K-9B?j{+NRE3O7K8BmJ4>uPg6jT)xeyY?EE>cev8 zW=uQ3z(Ohv4a-*r7nsJ>iZcbRYe3FdO$49kU^-t@@jBk10wfD;Uzr(sx-(_Vza0c( z<96A}>qiZFN;U=mj$KlTv>vu?&-EOwG^Ts=cEOF|9lWRDU4iY@(KoC`dqGdCoQ?u?k4>*}t8uLQd9 zB62l46nrDF<^HA=aljq_DeO0oLwWI3=N;4^ju>Qw8x zYiRj}Zw*+_d&K{;0UNkh11rSQ#y1Wo9^#!5L@VP*xmUP>_Ni;=INrOA&4Z!#(9Lk^ zDw^BnDs*lIor9sq{o(J?*&7e9Aax+p-xlfl329!tSFm>l2bOW@%$0CMJWP-8ZvD}} zjG^l|0{o282Hs8x{Kz~ZAKMPr0BmOFEm(&HQSonzP9*v796&eSI(fM6^syf!LgK4n zm#fp5^y?|$3_TkdS06m{48xg#~IFgCL{v7Q!?zEus zFKk!Pu3+X*gvC}`zx`@ZtjoxWOTJF@o;*08%db25OE;d z*A`vD`DIvSL&U@J2+8PMh9j$Q^sC>|9=`q05YeG0ppN^=sLPhFf%tDi8`@R(Qri$Q6)iiAg{tvY&uFe1e literal 0 HcmV?d00001 diff --git a/Project3-main/Project3/bin/v1/RSA.class b/Project3-main/Project3/bin/v1/RSA.class new file mode 100644 index 0000000000000000000000000000000000000000..515ed6768baa35e78dd52a5cf1f722e43ba840a9 GIT binary patch literal 3412 zcmZ`+U057v6@F)Tc4u}oNeE##B_!J+Aqh($n^Jx(G)W227UU;SAhd{0GAsj3*qvEs z2LerPt0rn%e=Dh)wraE%tw!6b3y<-M_j>P@Ug?GR-sTbCZ+6qAh3@n0&dm3nbH4Yy z=RIfOumAhgeE^+UQxK34UVJQdexyr*ETQ6xv1p_+hCP!Sp1fkFJqeMX-hsZszR}+E z5-JDE`y-xf*)yFIc6K{<-ZN}(%*ZU5Dk2gBCr>i&la_6HrzHgIlVcL(ZfDAjB8XiY zqSzr}_kd-aLkrnS(;YP?Go}ddq>ap&;acLkv?zPCR$hWSP=v_?<*Z@Z65{m}Tj3thwKF-zWx6VkNzew(eBPKbbt~VYM^T5QAg+M{w}F-%6Bdmcns9>D8@ZfmPf2Ln z&U8y+rBgdah?5!~Lo@mIoMMF~RMjW9xX`u*Z3>FKL?NM5!;?70dgf=Hs}e%>6aC3C6=%o`OQlblX(}eK8}^h=%IHKEV(8Lv z7Tt`^eNil52>qXduvY+~)?~w-p@{ZwqZl6S1Cy|0Q+-)HV&HE!KSMs#R&LgGDeQ@U z3DFtT>$4XrFKRYa-`}6?4{ek_5+q7fqLq~8caH5b;u-0=K_gevb13Ir6`{g(6rSuv z@nIv%lZJ>G%sQ-G*fsMD8D_V`B>_&B+R2&2 z&dL~`<=A@8b=XQ-QWqInwmoA>H-(SREzg-VZT(R4P@~?dn@c%%JDrVb&vbRsb47z_ z6qk^s9$YiyV<66Y;#NRjisNFzvofjkKFTPju}l11(J+S$-E4Eo8*pqIa}4y0vfCOQ z4D)#=?dRz`emq+?1!Jp6(%iMC43E4>2ER;IW`pHOkmnTR#<$UUpEzn6*A%??5T!rV zijvmw628O;8PlHeW_@IR!u%Btuj0$3+;h5T4Y$j6jb)K;a-v&oe^tYE+@SIn#h@FW z7M<9)t?=sbb=aU(TS+xb_)s-$zbJ zhQw=_QYB;|Qnp7p?bvC9Zd!)yk2=jFBep<{#oMl%e}Eq;_@RVdWh8=LF%52sMd}~*3q&h zUAq-LqvBVB0gj3m{940r#251`Bpq3=s+!H8)TCb3_=L=s)&|_%7IKL?BK7)l@zZMuc3xD?EKI-+09?!0LZA| zuU0g`9#rxvg1xBXig5lrEyOgqd=IhlHS8NGT?Z>489Lt7Sit@c`6DFmp>DkL=o;#q z3OHUss({D2TKPF%tL1fcJTy5?lg4VffTuRw70^@0)j;S1gGi%-81`Z(YOtFnufP*T zc$zEY9J!Ye_p!GW@!@GaLq8SI<5~0(eFe^;pLYS;590I8H^?}>7~qr4_(K>j<#>a8 zVfrSc?eZ#W68d~x*5@sKKDu%n;kbM^E=P@anTsoLZT!0m=kC%tNJt zRIb!`#Kn)vZD774Q1l)yjaM3LNdJXT0iV611fTVf6M(;mrhi-y1hs0yYZphBh&`D!S^nkOuwmDnnF>g_VM(iN8l6 ztKTsKS}VST@ACLP9GBn28w8mm% cipher = new ArrayList(); + char[] msgArr = msg.toCharArray(); + //Pad if necessary + if (msgArr.length % 2 != 0) { + msgArr = Arrays.copyOf(msgArr, msgArr.length + 1); + } + for (int i = 0; i < msgArr.length; i += 2) { + long textVal = RSA.toLong(msg, i); + cipher.add(RSA.power(textVal, e, m)); + } + return cipher.stream().mapToLong(i -> i).toArray(); + } + + public String decrypt(long[] message) { + StringBuilder msg = new StringBuilder(); + for (long block : message) { + long decryptBlock = RSA.power(block, d, m); + msg.append(RSA.longTo2Chars(decryptBlock)); + } + return msg.toString(); + + } +} \ No newline at end of file diff --git a/Project3-main/Project3/src/v1/RSA.java b/Project3-main/Project3/src/v1/RSA.java new file mode 100644 index 0000000..d4d2bc4 --- /dev/null +++ b/Project3-main/Project3/src/v1/RSA.java @@ -0,0 +1,128 @@ +package v1; +import java.util.*; + +public class RSA { + + public static final String DELIMITER = "00"; + + public static void main (String args[]) { + Person Alice = new Person(); + Person Bob = new Person(); + + String msg = "Bob, let's have lunch"; + long[] cipher = Alice.encryptTo(msg, Bob); + + System.out.println("Message is: " + msg); + System.out.println("Alice sends:"); + show(cipher); + + System.out.println("Bob decodes and reads: " + Bob.decrypt(cipher)); + + System.out.println(); + } + + public static long getInverse(long n, long m){ + for (long k = 1; k < m; k++) { + if (((n%m) * (k%m)) % m == 1) { + return k; + } + } + return -1; + } + + /* @author Riley Miller + * @param a base value, a power for that base, and a mod value + * @return the result of the equation + */ + + public static long power(long base, long power, long mod) { + if (mod == 1) + return 0; + + long result = 1; + base = base % mod; + + while (power > 0) + { + if (power % 2 == 1) + result = (result * base) % mod; + + power/=2; + base = (base*base)%mod; + } + return result; + } + + /* @author Riley Miller + * @param minimum value and maximum value for the random number + * @return a random prime number + */ + public static long randomPrime(long min, long max) { + Random random = new Random(); + long randNum; + boolean done = false; + + do { + randNum = (long)(random.nextDouble() * (max-min + 1)) + min; + for (int i = 2; i < max; i++) + { + if (randNum % i == 0) + done = true; + } + } while (!done) + + return randNum; + } + + static long relPrime(long n) { + + Random random = new Random(); + long candidate; + + do { + candidate = random.nextLong() % n; + //Handle negatives + if (candidate < n) { + candidate += n; + } + } while (gcd(candidate, n) != 1) ; + + return candidate; + } + + private static long gcd(long a, long b) { + while (b != 0) { + long temp = b; + b = a % b; + a = temp; + } + return a; + } + + static long toLong(String msg, int p) { + if (p > msg.length() - 2) { + return 0; + } + char[] msgArr = msg.toCharArray(); + String concat = (int) msgArr[p] + DELIMITER + (int) msgArr[p+1]; + return (long) Integer.parseInt(concat); + } + + static String longTo2Chars(long x) { + String[] charStrings = Long.toString(x).split(DELIMITER); + StringBuilder result = new StringBuilder(); + for (String charString : charStrings) { + char msg = (char) Integer.parseInt(charString); + result.append(msg); + } + return result.toString(); + } + + static void show(long[] cipher) { + System.out.print("[ "); + for (long val: cipher) { + System.out.print(val + " "); + } + System.out.print("\b]"); + } +} \ No newline at end of file