# CRYPTOHACK Writeup: General (Author: dpduy123)
## ENCODING
### ASCII

Solution:
```python = 0
ASCII = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114,
49, 110, 116, 52, 98, 108, 51, 125]
flag = ''
for c in ASCII:
flag += chr(c)
print(flag)
```
-> Flag: `crypto{ASCII_pr1nt4bl3}`
### Hex

Solution:
```python = 0
from binascii import unhexlify
flag =
unhexlify(b'63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d')
print(flag)
```
-> Flag: `crypto{You_will_be_working_with_hex_strings_a_lot}`
### Base64

Solution:
- Đầu tiên ta sẽ decode tất cả các hex, sau đó encode thành base64 là nhận được flag.
```python = 0
import base64
from binascii import unhexlify
hex = unhexlify('72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf')
flag = base64.b64encode(hex)
print(flag)
```
-> Flag: `crypto/Base+64+Encoding+is+Web+Safe/`
### Bytes and Big Integer

Solution:
``` python = 0
from Crypto.Util.number import *
data = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
flag = long_to_bytes(data)
print(flag)
```
-> Flag: `crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}`
### Encoding Challenge
>Now you've got the hang of the various encodings you'll be encountering, let's have a look at automating it.
>Can you pass all 100 levels to get the flag?
>The 13377.py file attached below is the source code for what's running on the server. The pwntools_example.py file provides the start of a solution.
>For more information about connecting to interactive challenges, see the FAQ. Feel free to skip ahead to the cryptography if you aren't in the mood for a coding challenge!
>Connect at socket.cryptohack.org 13377
Challenge files:
* 13377.py
* pwntools_example.py
## XOR
### XOR Starter

Solution:
### XOR Proporties

Solution:
### Favourite bytes

Solution:
### You either know, XOR you don't

Solution:
### Lemur XOR

Solution:
## MATHEMATICS
### Greatest Common Divisors
### Extended GCD
### Modular Arithmetic 1
### Modular Arithmetic 2
### Modular Inverting
## DATA FORMATS
### Privacy-Enhanced Mail?

Solution:
- tải và lưu PEM file và code chung folder
- sử dụng hint để decode.
- sử dụng module RSA
```
from Crypto.PublicKey import RSA
```
- mở tệp ``` open(file, mode)```
- đọc file bằng ``` RSA.importKey()```
input:
```
from Crypto.PublicKey import RSA
f = open("privacy_enhanced_mail_1f696c053d76a78c2c531bb013a92d4a (4).pem", mode='r') #'r':chi_doc
key = RSA.importKey(f.read())
print(key.n)
```
output:
`15682700288056331364787171045819973654991149949197959929860861228180021707316851924456205543665565810892674190059831330231436970914474774562714945620519144389785158908994181951348846017432506464163564960993784254153395406799101314760033445065193429592512349952020982932218524462341002102063435489318813316464511621736943938440710470694912336237680219746204595128959161800595216366237538296447335375818871952520026993102148328897083547184286493241191505953601668858941129790966909236941127851370202421135897091086763569884760099112291072056970636380417349019579768748054760104838790424708988260443926906673795975104689`
### CERTainly not:

Solution:
- định dang file der về file pem
- lưu file và code cùng folder
Script:
```python = 0
from Crypto.PublicKey import RSA
f = open("2048b-rsa-example-cert_3220bd92e30015fe4fbeb84a755e7ca5.der", mode='rb')
key = RSA.importKey(f.read()) #'rb':dinh_dang_file_ve_dang_nhi_phan
print(key.n)
```
Output:
```
22825373692019530804306212864609512775374171823993708516509897631547513634635856375624003737068034549047677999310941837454378829351398302382629658264078775456838626207507725494030600516872852306191255492926495965536379271875310457319107936020730050476235278671528265817571433919561175665096171189758406136453987966255236963782666066962654678464950075923060327358691356632908606498231755963567382339010985222623205586923466405809217426670333410014429905146941652293366212903733630083016398810887356019977409467374742266276267137547021576874204809506045914964491063393800499167416471949021995447722415959979785959569497
```
### SSH Keys


note:
- đưa file pub về file pem tương tự như đưa der về pem
input:
```python = 0
from Crypto.PublicKey import RSA
f = open("bruce_rsa_6e7ecd53b443a97013397b1a1ea30e14.pub", mode='rb')
key = RSA.importKey(f.read())
print(key.n)
```
output:
```
3931406272922523448436194599820093016241472658151801552845094518579507815990600459669259603645261532927611152984942840889898756532060894857045175300145765800633499005451738872081381267004069865557395638550041114206143085403607234109293286336393552756893984605214352988705258638979454736514997314223669075900783806715398880310695945945147755132919037973889075191785977797861557228678159538882153544717797100401096435062359474129755625453831882490603560134477043235433202708948615234536984715872113343812760102812323180391544496030163653046931414723851374554873036582282389904838597668286543337426581680817796038711228401443244655162199302352017964997866677317161014083116730535875521286631858102768961098851209400973899393964931605067856005410998631842673030901078008408649613538143799959803685041566964514489809211962984534322348394428010908984318940411698961150731204316670646676976361958828528229837610795843145048243492909
```
### Transparency:

Solution:
- Tìm miền phụ của cryptohack.org
- 
- Truy cập https://thetransparencyflagishere.cryptohack.org sẽ ra flag
-> Flag:
```
crypto{thx_redpwn_for_inspiration}
```