Shanghai American School RSA driven digital privacy (AKA SAS-RSA)

What am I proposing? I am proposing all students adopt the RSA encryption application I developed to ensure digital privacy.

This is the link to upload your public JSON file.

https://drive.google.com/drive/folders/1RYt8gtBAnEMxMdlU4CkAecZYaHEJx7Zc?usp=sharing
What is JSON / RSA

What is JSON (pronounced as Jason)? JSON is like a convenient way to store multiple numbers, words or data into a single, structured block. Here is what a sample JSON file could look like:

{
    "message": 211049460139873479722763380360964439513065622054757539875153415652565226739584587435023429252388437572948704752299230563475117918960329023119233211299899187721735271846806498541580000590682903169096846049056569021065974366908146919033279323008847320806941817,
    "signed_message": 5734257813149530865684549062737335865343514771640021775612947780658839925183525241021323616502278129825271958748438705869769432087426626813213032151480808654795213244784050672482001557073654876273135169257894272098290704552920583487194538805967948355902162525514296496638119350345402500593718433581626295061355463590888069404493666036885675336861900379811676227418757734281942040162520490416972810026486304313739532967254856356437085583017714189709225484424495686780013777776521367122541272965751831054580098376533677971891509168127713311681744619313969777708780440290352707521755364459239900947306523141807477655161,
    "n": 13028620201814797791858326238728865138274084607305037146056206412285553198864136126831793186837737535516105619841140754798918976903565807957866180842002228743174758013659649596689726477965841615521866950953256373934368397784255506536632471845771669232906880741908955594730645838598486766532574772719040967082400857362657481460984611135893719188371991969911915897667644227829715114075543791895931165351346721918961227886831025390772779519524387965508777737733576937447400348195723707210149312031116944510634858964361876552304929491646241044618189141253672850145350048856436549733442796159249347457823679639237690093453,
    "e": 65537,
    "length": 107
}

The data structure represented with two curly braces {} is called a DICTIONARY. Here is how it works.

{
    "name": "Junxi Liu",
    "age": 14,
    "Second Enrichment Test Score": 92
}

This dictionary allows us to group multiple named attributes of an element. For example, we can retrieve the name, age or Second Enrichment Test Score of this dictionary.

The data structure represented by two square brackets [] is called a LIST. Think of an ordered set

[1, 2, 3, 4, 5] # "If you have nothing to hide then you have nothing to fear", is an entirely authoritarian idea. People need to remember that authoritarians are always trying to play around with an emotive shift to gain over a moral narrative.  

This list allows us to store multiple elements. To access each element, we do something like list[1]=2, list[0]=1. The list’s beginning index starts at zero, not one.

Ultimately, here is what a proper-structured JSON file could look like,

{
  "data_storage": {
    "distance_pos": [
      0.0,
      0.0,
      0.0
    ]
  },
  "hud_data": {
    "seed": -4514862819476258936,
    "spawn_chunk_radius": 2
  },
  "entities": {},
  "shapes": {
    "shapes": [
      {
        "type": "despawn_sphere",
        "color": 553648127,
        "enabled": true,
        "display_name": "Pillager Despawn Sphere",
        "render_type": "outer_edge",
        "layers": {
          "mode": "ALL",
          "axis": "y",
          "layer_single": 0,
          "layer_above": 0,
          "layer_below": 0,
          "layer_range_min": 0,
          "layer_range_max": 0,
          "hotkey_range_min": false,
          "hotkey_range_max": false
        },
        "snap": "center",
        "combine_quads": false,
        "center": [
          -1911.478282999299,
          213.00031586456188,
          -6.541463091832624
        ],
        "main_axis": "UP",
        "radius": 128.0,
        "margin": 1.5
      },
      {
        "type": "circle",
        "color": 1613803696,
        "enabled": true,
        "display_name": "Circle / Cylinder",
        "render_type": "outer_edge",
        "layers": {
          "mode": "ALL",
          "axis": "y",
          "layer_single": 0,
          "layer_above": 0,
          "layer_below": 0,
          "layer_range_min": 0,
          "layer_range_max": 0,
          "hotkey_range_min": false,
          "hotkey_range_max": false
        },
        "snap": "center",
        "combine_quads": false,
        "center": [
          218.5,
          -64.0,
          86.5
        ],
        "main_axis": "UP",
        "radius": 1.0,
        "height": 384
      },
      {
        "type": "sphere_blocky",
        "color": 1613803696,
        "enabled": true,
        "display_name": "Sphere (block-based)",
        "render_type": "outer_edge",
        "layers": {
          "mode": "ALL",
          "axis": "y",
          "layer_single": 0,
          "layer_above": 0,
          "layer_below": 0,
          "layer_range_min": 0,
          "layer_range_max": 0,
          "hotkey_range_min": false,
          "hotkey_range_max": false
        },
        "snap": "center",
        "combine_quads": true,
        "center": [
          284.5,
          47.0,
          -536.5
        ],
        "main_axis": "UP",
        "radius": 5.0
      },
      {
        "type": "sphere_blocky",
        "color": 1613803696,
        "enabled": true,
        "display_name": "Sphere (block-based)",
        "render_type": "outer_edge",
        "layers": {
          "mode": "ALL",
          "axis": "y",
          "layer_single": 0,
          "layer_above": 0,
          "layer_below": 0,
          "layer_range_min": 0,
          "layer_range_max": 0,
          "hotkey_range_min": false,
          "hotkey_range_max": false
        },
        "snap": "center",
        "combine_quads": false,
        "center": [
          254.3282327684404,
          46.0,
          -509.57584449220764
        ],
        "main_axis": "UP",
        "radius": 6.0
      },
      {
        "type": "circle",
        "color": 1613803696,
        "enabled": true,
        "display_name": "Circle / Cylinder",
        "render_type": "outer_edge",
        "layers": {
          "mode": "ALL",
          "axis": "y",
          "layer_single": 0,
          "layer_above": 0,
          "layer_below": 0,
          "layer_range_min": 0,
          "layer_range_max": 0,
          "hotkey_range_min": false,
          "hotkey_range_max": false
        },
        "snap": "center",
        "combine_quads": false,
        "center": [
          268.53178898638635,
          47.0,
          -509.67808066828104
        ],
        "main_axis": "EAST",
        "radius": 10.0,
        "height": 1
      },
      {
        "type": "can_spawn_sphere",
        "color": 1621114960,
        "enabled": true,
        "display_name": "Can Spawn Sphere ( \u003e 24)",
        "render_type": "outer_edge",
        "layers": {
          "mode": "ALL",
          "axis": "y",
          "layer_single": 0,
          "layer_above": 0,
          "layer_below": 0,
          "layer_range_min": 0,
          "layer_range_max": 0,
          "hotkey_range_min": false,
          "hotkey_range_max": false
        },
        "snap": "center",
        "combine_quads": false,
        "center": [
          333.41195241364574,
          203.0,
          -420.74668214842933
        ],
        "main_axis": "UP",
        "radius": 24.0,
        "margin": 0.0
      },
      {
        "type": "despawn_sphere",
        "color": 1621114960,
        "enabled": false,
        "display_name": "Despawn Sphere ( \u003e 128)",
        "render_type": "outer_edge",
        "layers": {
          "mode": "ALL",
          "axis": "y",
          "layer_single": 0,
          "layer_above": 0,
          "layer_below": 0,
          "layer_range_min": 0,
          "layer_range_max": 0,
          "hotkey_range_min": false,
          "hotkey_range_max": false
        },
        "snap": "center",
        "combine_quads": false,
        "center": [
          333.41195241364574,
          203.0,
          -420.74668214842933
        ],
        "main_axis": "UP",
        "radius": 128.0,
        "margin": 1.5
      }
    ]
  }
}

This allows the server and the client to access databases. How does the encryption work?

First of all, let’s break it down so that a 6th grader could understand. A prime number is a number that can be divided by only 1 and itself.

[7, 13, 11, 23, 29, 31, 37, 17, 19] # These are primes
[14, 56, 28, 10, 24, 55, 77, 76, 63, 126] # These are not primes

Now, it is difficult to factor a large number of 300 – 600 digits into two individual primes. So here is how the RSA encryption algorithm works. You take two very large prime number, p and q. Your public key, n is equal to p times q. Then, you encrypt a message with your recipient’s public key. This allows your recipient to decode the message with their private key, but not the public key. This means that the recipient is the only one who can decode all messages sent to him.

How to install the program and set up keys

Now, what do I need you to do?

Well, first, drag the cryptography folder into your ~/bin folder.

By typing ~/ into your spotlight search, you get to open the ~/usr folder, or the secondary root directory.

Then, find a bin folder (If you don’t find one, just create one instead).

Drag your cryptography folder into the bin folder.

Here is what it should look like

  • Documents
  • Desktop
  • Applications
  • bin
    • cryptography
      • Decrypt
      • Encrypt
      • KeyGen
      • Sign
      • Verify
      • Vote
      • keys.json
      • vote.json
      • message.json
      • public.json
  • Downloads
  • etc

Now, download and install the latest version of python. https://www.python.org/downloads/

Almost done! All you have to do now is to open your terminal (Just go into spotlight search and type in “terminal”)

then, run each of these commands one line at a time

ln -s ~/bin/Cryptography/Encrypt ~/bin/Encrypt
chmod +x ~/bin/Encrypt
ln -s ~/bin/Cryptography/Decrypt ~/bin/Decrypt
chmod +x ~/bin/Decrypt
ln -s ~/bin/Cryptography/Sign ~/bin/Sign
chmod +x ~/bin/Sign
ln -s ~/bin/Cryptography/Verify ~/bin/Verify
chmod +x ~/bin/Verify
ln -s ~/bin/Cryptography/KeyGen ~/bin/KeyGen
chmod +x ~/bin/KeyGen
ln -s ~/bin/Cryptography/Vote ~/bin/Vote
chmod +x ~/bin/Vote

Now to add ~/bin to PATH

export PATH="$HOME/bin:$PATH"
source ~/.zshrc

Troubleshooting

IssueFix
Command not foundEnsure ~/bin is in PATH
Permission deniedRun chmod +x ~/bin/Cryptography/Encrypt
Script doesn’t runCheck shebang (#!/usr/bin/env python3)

If there are any more issues, contact my email.

Worst Case scenario, ask DeepSeek.

Now, the fun part. First, you generate your keys by typing

KeyGen

Into the terminal. It will ask you for your name. Type your FULL NAME out, then press enter.

Finally, upload the file <your_name>.json to the google drive.

You are now set to Encrypt, Decrypt and Sign messages.

If for any reason you believe that your keys are leaked, I can assist you in regenerating your keys. Safeguards are present to prevent you from regenerating keys.

How to encrypt and decrypt messages

Encrypt Messages

To encrypt messages, what you want to do is to type this command into your terminal

encrypt "Hello World" "message"

After pressing enter, you will see a prompt to write the public key of the recipient you want to send it too. Take the database, and find the person who’s name you want to send to, and then copy and paste the public key into the prompt. Take good care not to accidentally press space or enter, unless submitting the message

Then, you will see a file labeled message.json in your ~/bin/Cryptography folder. Open the file, and then send it to your recipient. You can change the contents of the file by modifying the first argument, “hello world”, the name of the file by modifying the second argument “message”, or the recipient by modifying the public key used to encrypt the message.

Decrypt Messages

To decrypt messages, type the command into your terminal.

decrypt "message"

Obviously, replace message with the file name you want to decrypt. It will use your private keys to decrypt the message (Keep in mind, a malicious agent might want to decrypt with someone else’s private keys. This is another safeguard)

Effective Collaborator Task 1. (30 points)

Create a new club.

The club I chose to make was a computer science club that focused on teaching people the basics of computer science to make Neural Networks and calculators. The club launches on March, and is aimed to teach people the basics of programming languages such as C++ and Python in the span of 3 weeks. The definition of success in my club is defined as “Those who take the C++ course can code a dynamic array from scratch.” and the definition of success for my Python course is “Those who take the python course can write a feed forward neural network with “weak” training algorithms”. In short, this club will boost my reputation in the community of computer scientists

Critical Thinker 3: Ethical Dilemmas

The task made me pick an ethical dilemma. I am picking the trolley problem. The trolley problem is, if a trolley is heading towards 5 people, would you save the 5 people, turning the track onto one person, killing that one person? This is a very good task to train my critical thinking abilities. I believe that the optimal solution depends on who the people are. However, it would seem unfair to doom 5 people just because one was a murderer. Next, we think about the global value. What decision will make the world a better place? That tells me to pull the lever. I would pull the lever because the world would be a better place losing one man than losing 5 people. This problem and countless others involve cold, hard logic because logic prevails above all.

Reflections on each TTG

Critical Thinking: I think that the critical thinking TTG was by FAR the hardest. I could find no way to prove I was a critical thinker, although I got it done by a lot of help from others. One of my favorite activities was an ethical dilemma. Presented with an option between killing one man and letting 5 die, it made my brain work. These activities were incredibly fun and challenging, though it did make me question the true nature of LL. For example, our assignments are as hard as it gets, and we shouldn’t get an extra burden to worry about. On the other hand, LL seems like a good place to work on passion projects, but that isn’t happening anytime soon. It made me think of the necessity of the apprenticeship tasks as a whole.

Creative Learner: That was easy. I just used some projects I already had to fulfill the requirements. I am a programmer, about top 20 in the school leaderboard, and I have a portfolio of projects that I could easily use to my advantage. For example, the tasks “create an app” and “film a short video” were made possible by my own passion in the past. And so I got them done with ease. One program that I’m working on is called the Dungeon Generator

Effective Collaborator and Skillful Communicator: I decided to group these two together because they involved me in communicating with others, which was not something I was good at. I decided to opt for “easy” tasks that involved a call and a response that would take as little social interaction as possible.

Resillience: That was effectively, also the easiest for me, as I could just use some projects from before to prove some tasks. For example, In the “learning a new skill” category, I just took my documentation from a previous project and then made it fit the category.

Outside Project: One of the most exciting projects I undertook this year was building a fully functional calculator in the hit game Minecraft. This endeavor took me two weeks and proved to be one of the most challenging yet rewarding experiences I’ve had in the game. What started as a simple idea quickly evolved into a complex undertaking that deepened my understanding of computer architecture and logic design.

Creating the calculator involved using Minecraft’s redstone mechanics, which function similarly to electrical circuits in real-life computers. I began by researching how basic arithmetic operations are performed in digital systems. This foundational knowledge helped me design the core components of my calculator: an adder, subtractor, multiplier, and divider. Each component required intricate wiring and clever use of redstone to ensure that the signals would flow correctly, mimicking the logic gates found in traditional computing.

The process was not without its challenges. Debugging the system took a considerable amount of time. I frequently found myself troubleshooting issues where the output didn’t match the expected results. This experience taught me patience and the importance of systematic problem-solving. I learned to break down complex issues into smaller parts, making it easier to identify and fix errors.

As the project progressed, I also experimented with various input and output methods. I incorporated levers and buttons for input and used redstone lamps to display results. The moment I successfully input a calculation and saw the correct result light up was incredibly satisfying. This project wasn’t just about building a calculator; it became a profound learning experience about how computers operate at a fundamental level.

In the end, my Minecraft calculator was more than just a functional tool; it was a testament to my growth as a builder and thinker within the game. This project has inspired me to explore even more complex redstone creations in the future.

Communicator Task 7, Instructional Guide (30)

So, I’m back at doing this busy work branded as apprenticeship. My guide is going to be a guide to all the monsters in Roblox Doors.

This is screech. He will creep up on you, and make a ‘psst’ sound when he gets close. You have to look at him, in which he will make an earsplitting noise.

This is halt the ghost. He will chase you down a corridor, and then just about when he’s about to catch you, the screen will flash blue, and he will teleport in front of you and chase you again. Walk backwards until the screen flashes, then walk forwards.

This is Seek. Seek is a black monster made from red and black goo. He will chase you down an obstacle course. Run from him.

This is the figure. He is blind, but can hear you from a mile away. Keep your voice down, because he can, and will, outrun you.

This is rush. He will make the lights flicker, and rush through rooms like a calculus student realizing he only have 2 minutes to get to class. If you stand in his way, you instantly die. The only way to survive is by hiding somewhere where rush cannot get to you, like under a bed or in a closet.

This is AMBUSH. He’s like rush, but he will zip to class, realize he forgot something, zip back, and this repeats for a few times. You never know if he’s going to return or not.

This is EYES. Don’t look at him.

This is dupe. He will hide behind fake doors and catch you off guard.

This is Hide. He makes sure you don’t spend too much time hiding in closets. In the mines aka doors part 2, he will make sure that you can’t hide in the same closet twice in a row.

This is Giggle. He usually clings onto ceilings, and whenever you walk under him, he will fall down and damage you.

These are gloombats. They are creatures that will swarm the nearest light source, breaking it or you if you happen to emit light.

This is a Grumble. The grown up form of a giggle. They dwell underground, and make tunnels that you or they can explore through. They are deaf, which means they will not chase a sound. Due to their size, you might be able to find a small hole to hide from them.

This is the final boss of Floor 2. Seek takes over a dam, turning all the water to seek goo, and this monster materializes. He will throw a variety of attacks onto you, like hands that try to pull you down to worms of goo that jump through the puddle like sharks. To defeat him, block his water supply, and he will be flushed.

Skillful Communicator 6

My Speech topic: Abolish all apprenticeship tasks.

Dear audience, it has been a great burden that has been put upon our people. Instead of having Learning Lab to ourselves, we now have Apprenticeship. THEN, the people in charge decide to whittle our time with boring brain drains like the makerspace guide, that frankly, we cross the bridge when we get there, and the constant talk with Mr Caskie that ends up killing our time to do apprenticeship. Learning lab fails to be a place where our stress is relieved. Rather, LL is now an additional source of stress. Are our hands not full enough? Do the people at the top want to give us hope of relief, only to take it away with these? I propose that all apprenticeship tasks are OPTIONAL and count for extra credit. We are falling in the water, and instead of giving us a hand, they decide to bring us down even further into the spiral of stress. Vote Junxi for president if you want to see apprenticeship tasks gone, where they belong.

That’s Outlandish (60 pts)

That’s outlandish is an AT that requires me to write an impossible proposal, and then back it up.

My proposal: The school should build a terrarium to house animals.

Justification: Now, we probably won’t grow up to become farmers. However, this terrarium can foster a sense of spirit and responsibility. The same way my school in Singapore used to give every class a plot of land to tend to, I believe this terrarium can bring the school great rewards. Some animals that we can raise include: Ducks, chickens or various insects. The purpose of the terrarium would be to encourage our students to make contact with the natural world, and encourage students to play a part in a project the entire school works on.

Reflection of November 4

We did an activity involving a chain of zoomed-in images. For example, an image of a train could devolve into an cave-painting of a man holding an arrow. It trained out abilities to draw patterns from what we had. The irony was that I had the most zoomed out images and the most zoomed in images, which means I didn’t have a person to the “left” or a person to the “right” to compare for contradictions. This led me to be a bit lost, but ultimately, it trained my skills to communicate with people.

« Older posts

© 2026 Junxi’s Portfolio

Theme by Anders NorenUp ↑