Skip to content

Instantly share code, notes, and snippets.

@dwerbam
Created June 30, 2019 07:32
Show Gist options
  • Save dwerbam/3077ceab024c8203ce60f35808dc25fc to your computer and use it in GitHub Desktop.
Save dwerbam/3077ceab024c8203ce60f35808dc25fc to your computer and use it in GitHub Desktop.
Steganos with cryptography.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Steganos with cryptography.ipynb",
"version": "0.3.2",
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/dwerbam/3077ceab024c8203ce60f35808dc25fc/steganos.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "CQPzqwBMa0Tn",
"colab_type": "code",
"outputId": "2f6d590b-5f90-4fc3-f5a0-c4da6c13d1f7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 338
}
},
"source": [
"!pip install Stegano"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"Collecting Stegano\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/eb/03/adf44dedc4a72e15c7cc9572ca7a1e3bfbd1b76cbce116a4db0b580828ad/Stegano-0.9.4.tar.gz (240kB)\n",
"\u001b[K |████████████████████████████████| 245kB 2.8MB/s \n",
"\u001b[?25hRequirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from Stegano) (4.3.0)\n",
"Collecting piexif (from Stegano)\n",
" Downloading https://files.pythonhosted.org/packages/d9/45/19726eac3f8ddedccff86de92fa6d16d90b0e9257df811b7331f0b91d966/piexif-1.1.2-py2.py3-none-any.whl\n",
"Collecting crayons (from Stegano)\n",
" Downloading https://files.pythonhosted.org/packages/b6/ee/1a4f411c66f2788baf82a91b6f726473d9f4075ec7b86c860ba15294ce90/crayons-0.2.0-py2.py3-none-any.whl\n",
"Requirement already satisfied: olefile in /usr/local/lib/python3.6/dist-packages (from pillow->Stegano) (0.46)\n",
"Collecting colorama (from crayons->Stegano)\n",
" Downloading https://files.pythonhosted.org/packages/4f/a6/728666f39bfff1719fc94c481890b2106837da9318031f71a8424b662e12/colorama-0.4.1-py2.py3-none-any.whl\n",
"Building wheels for collected packages: Stegano\n",
" Building wheel for Stegano (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Stored in directory: /root/.cache/pip/wheels/54/1d/75/ea98951c1189f7d1fb162cc3b2edc8a0c3f62c722a29923235\n",
"Successfully built Stegano\n",
"Installing collected packages: piexif, colorama, crayons, Stegano\n",
"Successfully installed Stegano-0.9.4 colorama-0.4.1 crayons-0.2.0 piexif-1.1.2\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "--rxsQ6soCKS",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 232
},
"outputId": "615eca0b-34b9-4b1d-a0c4-3dfb8262549b"
},
"source": [
"!pip install cryptography"
],
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"text": [
"Collecting cryptography\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/97/18/c6557f63a6abde34707196fb2cad1c6dc0dbff25a200d5044922496668a4/cryptography-2.7-cp34-abi3-manylinux1_x86_64.whl (2.3MB)\n",
"\u001b[K |████████████████████████████████| 2.3MB 2.8MB/s \n",
"\u001b[?25hCollecting asn1crypto>=0.21.0 (from cryptography)\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl (101kB)\n",
"\u001b[K |████████████████████████████████| 102kB 26.8MB/s \n",
"\u001b[?25hRequirement already satisfied: cffi!=1.11.3,>=1.8 in /usr/local/lib/python3.6/dist-packages (from cryptography) (1.12.3)\n",
"Requirement already satisfied: six>=1.4.1 in /usr/local/lib/python3.6/dist-packages (from cryptography) (1.12.0)\n",
"Requirement already satisfied: pycparser in /usr/local/lib/python3.6/dist-packages (from cffi!=1.11.3,>=1.8->cryptography) (2.19)\n",
"Installing collected packages: asn1crypto, cryptography\n",
"Successfully installed asn1crypto-0.24.0 cryptography-2.7\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "E1H4jzGbPeZf",
"colab_type": "code",
"colab": {}
},
"source": [
"message = \"\"\"\n",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum at tellus velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam fermentum sapien in dictum tincidunt. In purus ex, volutpat vel massa id, vestibulum ultrices enim. Praesent fermentum mi tortor, eu iaculis enim sagittis id. Mauris in dui a ligula luctus pulvinar. Phasellus metus quam, maximus sed placerat eu, pellentesque et lorem. Sed sed euismod mi, eu consequat elit. Maecenas viverra ipsum eu ex pulvinar, nec mollis quam lobortis. Nunc tempor, dui a tincidunt laoreet, metus est consectetur libero, sed condimentum massa justo et arcu. Donec egestas eleifend auctor. Praesent posuere mauris sollicitudin, fermentum massa ac, volutpat urna. Fusce vitae interdum magna.\n",
"Nam vestibulum, nunc quis placerat sagittis, neque felis hendrerit nisi, eu auctor orci leo id ipsum. Nam vel nisl orci. Cras eleifend tempor diam, ut lacinia lectus facilisis eget. Praesent at fringilla ante. Cras pharetra nisl justo, in interdum velit tempor sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus dictum aliquet ipsum. Curabitur at mi in est lobortis egestas et rhoncus nibh. Nulla facilisi. Ut pharetra ex sit amet risus volutpat, in lobortis nisl tempus.\n",
"Duis ac tristique nibh, a luctus magna. Proin in turpis purus. Proin venenatis sapien ac mauris aliquet viverra. Curabitur quis sapien fermentum, porta felis nec, luctus dui. Aenean fringilla justo est, quis laoreet dolor hendrerit a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In ornare velit id arcu pulvinar, id tristique velit lobortis. Quisque vel nisi quam. Donec mattis quam ut ligula aliquet consectetur. Proin a hendrerit ipsum.\n",
"Praesent molestie sit amet turpis eget tincidunt. Praesent pharetra ornare lorem eget congue. Etiam facilisis ante nec quam convallis rutrum. Donec vestibulum elit libero, ut congue eros commodo mollis. Ut pharetra sem nec magna iaculis mollis. Maecenas ullamcorper tempor augue quis rhoncus. Phasellus elit quam, faucibus et aliquet eget, sagittis et libero.\n",
"Phasellus est risus, suscipit at facilisis ac, facilisis eget velit. Duis accumsan justo eu mattis venenatis. In id orci vel quam feugiat porta id in sapien. Nam pellentesque mi vel lacus auctor porttitor. In scelerisque ultrices dui, sed tempor ante placerat id. Praesent quam risus, efficitur ac rhoncus sed, commodo in elit. Ut lacinia nunc lacus, vitae aliquam leo aliquam vitae. Vestibulum egestas sem nibh.\n",
"\"\"\"\n",
"password_provided = \"password\" # This is input in the form of a string"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "6hPyr3rGoAjD",
"colab_type": "code",
"colab": {}
},
"source": [
"import base64\n",
"import os\n",
"from cryptography.hazmat.backends import default_backend\n",
"from cryptography.hazmat.primitives import hashes\n",
"from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC\n",
"from cryptography.fernet import Fernet\n",
"\n",
"# generates encryption key\n",
"password = password_provided.encode() \n",
"salt = b'salt_23' \n",
"kdf = PBKDF2HMAC(\n",
" algorithm=hashes.SHA256(),\n",
" length=32,\n",
" salt=salt,\n",
" iterations=100000,\n",
" backend=default_backend()\n",
")\n",
"key = base64.urlsafe_b64encode(kdf.derive(password)) # Can only use kdf once\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Gt33rMRVvuq4",
"colab_type": "code",
"colab": {}
},
"source": [
"#### encrypts message\n",
"f = Fernet(key)\n",
"encrypted = base64.urlsafe_b64encode(f.encrypt(message.encode()))"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "xYNdGNT1fIVW",
"colab_type": "code",
"colab": {}
},
"source": [
"# brings file from remote to colab environment\n",
"import requests\n",
"\n",
"pngfile = \"example.png\"\n",
"\n",
"url = 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png' \n",
"r = requests.get(url)\n",
"\n",
"with open(pngfile, 'wb') as f: \n",
" f.write(r.content)\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "128AQAM6bur6",
"colab_type": "code",
"colab": {}
},
"source": [
"# hides information on image, and download it local\n",
"from stegano import lsb\n",
"\n",
"secret = lsb.hide(pngfile, encrypted.decode(\"utf-8\") )\n",
"secret.save(pngfile)\n",
"\n",
"from google.colab import files\n",
"files.download(pngfile)\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "aA0YavPwck80",
"colab_type": "code",
"outputId": "19058778-df0e-4c2d-fc0b-756b1f395dea",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
}
},
"source": [
"# retrieve hidden info from image\n",
"from stegano import lsb\n",
"encrypted = lsb.reveal(pngfile)\n",
"print(encrypted)\n"
],
"execution_count": 47,
"outputs": [
{
"output_type": "stream",
"text": [
"Z0FBQUFBQmRHR1RWeC1kTHl6MUtUVjRoUTIzUjV6VnprYkl3a2FoandDMDdlXzlIX1pHNld5M25tRGpIZktRMldJZUsyV1NzNVhKZXowZmgyTi05N0FYZXcyN0lTUnVJZ2E3MnNzSnZSSS1GZDdPUWhSYWtRNGFoOVlHakc5Qm1wYnV5cWx5YjFGRlVqbFNyVldDanh4SmVxOHMtMDVYMFJHTnl5NFBvNFcxTjJYZ0dpMVhfVjRRUzZWdkFoQTFjOEhxc0Q5YlloTURCUWY0aEFHbXZrbGtDT0F5Y0hlbEYtc1Rnc1VSdl91MDRlU0UyLUlzY1ZOOXVFTEhLX1h1dUFSemU3bHJZVHBzWkUwS2FFWlVmd1JKMW01QmlCZEVvYnV5TUplbUl2WmtlRmRlaG1BUjI3WTNodzJCdm9rRThOdmV4cVNHR2trbDAyLVh4b2pNQ2djWUtGVnNlTnJCaGFNQmxSd2xYcVYxN0ZUeURZaFNiSy12anVyZ0dVSWxCNWRrX1FtaVY0NVVKb2dmZmMwWXpBN3IxWDBsazV3czF1cnJMbXRDRXFGU1d3SDh5Wnd1VC1nc2JKeHFXWTlpWkQ5dUlxWjhzTEVYaHBWUXJsVFpUYmdJV2k5V1p2VUF2d0FEZG9QWmxrQmRfQ0pldFYtRXdlUVlBV2hKTzhCMVNBYVF1TkgxQzJQY1ByQ0YwbXBFZWxEMVlCLWxxbDdPZ1hsZVp5eWdHQWxZdU82VUluS2d1UjFJQWlQcWVWWXpaeEFwc0V6YU9yazIyMy0xMC1sMWd1VGUwRVNLSUlTVGM5V2hoVWNBbGUwUUxHckFDU0dhUlVYR2E5Y2Q1VGpBLVRGTzZoUVRSaTl0Q0E3Vjd0WkpkOVdLMExISllaWE9IYmxxN284Qkp0c3BzZDEzemxmRmNtNE5nejk1ZDBpanJIN2xwOGhHZzZ1OHAwLXZzY1o0clBxUjl5c1FUTVRralhyR1pMUGZnUnVyZHg3c3dKV0tIMjZrdldnaWlJVHZGRHJvTVhJZGQ0cDNaaGZ3VUh3dlNJRXNvOGxPRjNXR0E0MGFEdkNsS3hiaktyVkRwR25TNkVzb05QcWxQN3R4UUlncmcyb1JxTjI0bklldUxkNlRCbldhQjF0Y2E1clBFVnk4VmxVbTgtelZBT3pWRGpRa25RdWZHbkdSSF9iM0phclU3S3gydDZzdVhNaG5nY1ZkUGc0WjlQdHdSU3lPdUdGbG5TR3hpaEJXbHdqQlZlNldxWWx0aEd0QS10Yy1DN19SdWljTXh3ODg2Q1MzR3RvdkstUUd6cklENmJVcFlwUnRBM0xFTUlCM1BXdDdKenBZZ1lxUGIzQ3NaVUxDdUtEamg4aGRVVEppN2JkcmZVREg4VkN6bmFCckZ6dUJZVTJVMTZmTk1oOHItcEVJc2t4R3ZPLWZvOWh6MGlnYVBlQ2I3dWVHR1pXVG9HWnRpN1UtdmxvalRmY0ZVMWxBSVM3RGZMRGhRSXBPZGlYaFpmT0doMWpMbjdrWVFIaXRXc2MxNDBSOHB3b1E1cmtBQUpEazlMSVZhRkNvdHVVb09INlhEc01oLWxqczBfSjlrSDNYY1hNbjdSV0d5a1dBUThLWEQzSXNPR3BnWHRxWVFETGlDcWNnRnE3aXVXVmRTUDF0UFFXdWZCMi1VUlh2djVIUnA0ay1rMmUzWEtWYTQyeElnT0UxMEVBTUppbldHV1RLd1dWYk45dTFXLTg4ZnRuZ09qSWRiakdNR1gxNTB0UFd4LUhXeE9LdGZOT00wRUI3UDFBYWx6bW0yUGtuUlVzdmtfbzdMQjlmNndzR1RFcUZZZUJVZ2xUemU3LUdXZWowQkI3NktBV1ZpMnJyZktLamhSNXdsMmdsN29hT3JiZnBEbDhsREZWZW5aTXJwbjUxbW9uNjhadWhCUDJOeWxWUEl5dXVobU9yRlRNQm5RZUttVjVBNUVtZWpoNEx1NWRGWDFpOTJua0h0V1RNY3VoOGl2OGtVcDFFV2RxZ2RTVFI4RWhjS2ZVX1Q5LV9hQWFWOVVpMkVKOS1UNjB1UTR6RkVxZC15dTBFck1wOGhUbXZrMGo5UmZPcWdvMlFVc1VDNlZKLS1BWS1PWlhYTm85UHZkMjlNcWUya2FSRnpObEpwM1RQZjkyTTVSVENDRnBPTVdJelY1TUczdjRxMVBPcWZ1WmtkWnJXOXF1UzR6VTNFMmNXMzRIQWN0Tk9KdWpSZnNxcjFxRzhtLUlVd1FZdkpVbWY4SjcxOVVhZ3A0R3JiaGowdXVpM0NOMmtvU2lBY2hSeXVBa2RibFhYMWsxbnZiQ0xob2xQQ3FZNUZFQ3pIQXhRT0V2cklyVmhYMm9SWkhMR2NvVVB6RUNNLXBEakJPRGpXdHZzR1JmWHRCdHUwMWswcmlpaldvMFpiakxUUzM1U3QyU3REVGwtRjRCdGx2ODdVU1hBN1dJYW1NTWR6RTk4elBFd0djcUo2eFZGU2RMenkzZUtmZG1jMDgtTTF0Vkd4RzNZbElsN2xHWHFBandVUGlsd0pDZzdZVEJ4NENkeVh2SXU4S2hyMl9uTkxyVlItNUdTMTRfWGNjUnFfN0NWUk1Cd2xCVmVuLUl1VndaRi1wdXlCOU9vakxMcGZMQzN0bEVvejZ4ZUlybnZTOFFXMDZaWUZWWWEzdEdMSmMtTUxJdUczWFVVZkZPcHFDTUtqdVJ1NG9MRUFvRFBIbXVyM1VoOGV4ZmdrT1lXS3dCRnd5VUN1WXBfSThVRFlzZ3NSbHNLQVlOeUZ4MlIzQnpSckZQWjdoU0tSdWpHMEpjb3V3MWF3TUV5T0I2UFItU0FINDB0WHFwY1VJbVdGQXZrOEUwZG5GTGMyT051dkVCcUVrQTQ1bThMc0RGNjhUeWxCSlJIMVd2a0E4NUk3X2hNWm9RRFBaNjZYMnVEcVU0bG9CZExQTmRGSlNiSEhqZUdYbFphWDFFY3NYZEw2RGZqbHlQcEZ4Wm1VRmdFbi0ybkYtUGlQRzIyWm5GVHY0WHRURkdnaXR5QUNwZ09BdDNWNjY4UWxqcFNnRFhvMjIzOG1zeWsycHhEaXpIUkxidllXemtrZDVqeUNrUTNtYXI1OXU3dEZYS2hWTGxwdkx5NWlvbWlPVE9pdGlUV1V3dnhqOTdKLURwZGNuckJ6WmlZSEIxOWtyNWxTV25CaTh6NFlPYVNfUk9xY3loZG1tcVFrb2lMZTV3UER5TW5PMC0teGRWV2FDM3dpYUpXTDBDNEU3VFVPZU05bFdma1VYNnhNSHZqeUw3bzZXU0dGdUpMS1RxYmhVNERBWVdTdTR1Q2JPbS1ITV9CVUhQbWpsVW9iUTI1ZW5yQV9lT2JabzNNcEI5Q0IwdU1xZHJRb0lRVDBVbkJ2T1lyZVFvbXRIeVUxS3I1Y0NOZnI1ejZ4cWFZUWFZTTJmcWp0d2FyS3k2VjB5TUk3VWxCaDhwRUROVG4yYUZQSE5xRWU2RzhaR0llUEtPc1VHMFR2bmlwWnBnWFdwNGItNHhMZXF6QVIwS2Q4R1p0OEVfVkE0TzJOanFfVWdiT2dnOE9wV2ZGT1RqUXE1V3BxVFBZQkoxbEU3ZVRHcU5oSUt2V2hLeUhnT2VXZkdyWVRCSjNRMkQtY2drelhKQi1lajB3dTNnNUZBSzIxV243MnB6RUtKbUtFX0FxVlZ4T01FN0hVRmJGaTFzTjd0RFFGMllfZDBUaEdmTElTemZURkJ4X2x0RmNvOGRfNzY2a2JfdjZMT09EWFJfWFRxX0xlSlNWbmVvUk1MXzdTR1NSbmF6eFoxeVUwX19RV1pRcjJOZWpFbUNwakpFNFVSYWNZenJXUHNaWndBX0ppSmhwZV9VQXdFeHZzVEtsWDVkcm85ekM2ZnJsWU05cVZnTUxXZEJzLVlYR1JKdVdZZDdYU3RZWEp6VFJhZndvUFdCcUpkNE9EeVVkMnJnOC1DaFVOWkptazJEZm5QTUpjTklKQkdrRVlsRnh3ZjRXSzhkVGxhZU5BNXg4YlZOeVc1TWJnaEd4cEtTYTdMMFV3XzRRWENHRE9FVXktbUt5RjN4Z1M0NkJzNmRUY0lfZ0VPdjNWWVdlRU9CVkdHZElQc3VHa2FNTVEtdUVWbVAxMVJZdVVUQlVQa3NwTEhiaVFrdUlkeWY2SWhnRHo1RHROaWpKelRrZno0NWhVLTVmYnpfUFJpQmEyaXhIVGkxa1RVZFV1QnBRUFdqWGprbGtldFNmcjU2SWx6TUJCLXRnMk84WExNVWtNclZBdWJ2V1Z2M2lQY0ozWTBraGV5eGw2SlpVbWttbnlxSzY2cGtCYUZDNjQxVFZrY2dNeUt2bHh6SFhqWmNrQXYyM0ZORG5ta1l5OFJRRUxxMHJTaV9DaVpKdHA1alJobFJ3QWVaemZPOEtieE9XTzBTR1ZITV8yNGl5eTRzMUlMN1FEMEczLTh5NG9fSFRJMk53MXd5dWtaSDh0Y2ZYbng4djZWRms3RnJaNjhhVEtmaEdNeThnTEtLUklTUGRzWFVYTC1VdkpDaTFYWWNRZm9lR010N2NYSTgyZkdXSmp2Vjc2LUMwazVGYW1nYmg1Q1l0bHktX3Zka254\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "_CYQei-ZzAFj",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 161
},
"outputId": "98955716-58b6-4110-fd88-ceb64b275d7e"
},
"source": [
"# decrypts information\n",
"f = Fernet(key)\n",
"decrypted = f.decrypt(base64.urlsafe_b64decode(encrypted))\n",
"print(decrypted.decode('UTF-8'))"
],
"execution_count": 49,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum at tellus velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam fermentum sapien in dictum tincidunt. In purus ex, volutpat vel massa id, vestibulum ultrices enim. Praesent fermentum mi tortor, eu iaculis enim sagittis id. Mauris in dui a ligula luctus pulvinar. Phasellus metus quam, maximus sed placerat eu, pellentesque et lorem. Sed sed euismod mi, eu consequat elit. Maecenas viverra ipsum eu ex pulvinar, nec mollis quam lobortis. Nunc tempor, dui a tincidunt laoreet, metus est consectetur libero, sed condimentum massa justo et arcu. Donec egestas eleifend auctor. Praesent posuere mauris sollicitudin, fermentum massa ac, volutpat urna. Fusce vitae interdum magna.\n",
"Nam vestibulum, nunc quis placerat sagittis, neque felis hendrerit nisi, eu auctor orci leo id ipsum. Nam vel nisl orci. Cras eleifend tempor diam, ut lacinia lectus facilisis eget. Praesent at fringilla ante. Cras pharetra nisl justo, in interdum velit tempor sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus dictum aliquet ipsum. Curabitur at mi in est lobortis egestas et rhoncus nibh. Nulla facilisi. Ut pharetra ex sit amet risus volutpat, in lobortis nisl tempus.\n",
"Duis ac tristique nibh, a luctus magna. Proin in turpis purus. Proin venenatis sapien ac mauris aliquet viverra. Curabitur quis sapien fermentum, porta felis nec, luctus dui. Aenean fringilla justo est, quis laoreet dolor hendrerit a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In ornare velit id arcu pulvinar, id tristique velit lobortis. Quisque vel nisi quam. Donec mattis quam ut ligula aliquet consectetur. Proin a hendrerit ipsum.\n",
"Praesent molestie sit amet turpis eget tincidunt. Praesent pharetra ornare lorem eget congue. Etiam facilisis ante nec quam convallis rutrum. Donec vestibulum elit libero, ut congue eros commodo mollis. Ut pharetra sem nec magna iaculis mollis. Maecenas ullamcorper tempor augue quis rhoncus. Phasellus elit quam, faucibus et aliquet eget, sagittis et libero.\n",
"Phasellus est risus, suscipit at facilisis ac, facilisis eget velit. Duis accumsan justo eu mattis venenatis. In id orci vel quam feugiat porta id in sapien. Nam pellentesque mi vel lacus auctor porttitor. In scelerisque ultrices dui, sed tempor ante placerat id. Praesent quam risus, efficitur ac rhoncus sed, commodo in elit. Ut lacinia nunc lacus, vitae aliquam leo aliquam vitae. Vestibulum egestas sem nibh.\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "z6C4lZsAxoUQ",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment