iOS: Convert data into string and emailing it - ios

I've encountered an interesting solution to importing/exporting data through email. This particular solution doesn't involve attaching any files and also "encrypts" the information, such that it's not easy to decipher.
I'd like to know if anyone has an idea about how this is done.
Basically, this app allows you to export a custom-selected set of data by emailing you a link. The link is a URL scheme that opens the app and asks if you want to import the data. The data looks like it's encrypted, but I'm not sure. Below is an example of a link that the app generates. Does anyone know how this is accomplished?
Thank you!:
appofinterest://#;;bmFtZQ==;TmV3IFByb2ZpbGU=;;cHJvZmlsZVBob3Rv;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;;c3R5bGU=;MA==;;dXNlc1NJVW5pdHM=;MA==;;QXBwb2ludG1lbnQ=;;ZGF0ZU9m;MjAxMi0wMS0xNSAxMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NTY=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMi0xMyAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NzQ=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMi0yOSAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;MzUgwrBD;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMS0xMCAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;ODU=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMi0wMS0wMyAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NjQ=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMS0xMCAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NDYgbmcvbWw=;;dGVzdFR5cGU=;UHJvc3RhdGUgU3BlY2lmaWMgQW50aWdlbiAoUFNBKQ==;;ZGF0ZU9mVGVzdA==;MjAxMS0xMC0xMCAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NjM=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMi0wMS0wNiAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NTg=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMi0xMyAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;OTQ=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMi0yMiAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NTk=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMC0xMCAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;OTkuOCDCsEY=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0xMi0xMCAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;NjU=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0wNy0xMCAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;OTc=;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMS0wNy0xNSAwMDowMA==;;TGFiUmVzdWx0;;cmVzdWx0;MzIgwrBD;;dGVzdFR5cGU=;VGVtcGVyYXR1cmU=;;ZGF0ZU9mVGVzdA==;MjAxMi0wMS0wNSAwMDowMA==;;TWVkaWNhdGlvbg==;;ZnJlcXVlbmN5;b25jZSBwZXIgZGF5IChxLmQuKQ==;;cm91dGU=;SW50cmF2ZW5vdXMgKEkuVi4p;;ZHJ1Z05hbWU=;TXR4;;aXNDaGVtb0RydWc=;WWVz;;dG90YWxMaWZldGltZURvc2U=;ODUgbWc=;;c3RhcnREYXRl;MjAxMi0wMS0xNSAwMDowMA==;;c3RvcERhdGU=;MjAxMi0wNS0xMCAwMDowMA==

You could just convert your data to base64 (which is the case here*). Remember that URI are not (practically) unlimited in length and might, like the link you posted, be a little meaningless for your users.
(*) in the case you posted, the data is separated by semi-columns, for example "TmV3IFByb2ZpbGU=" is base64 for New Profile, and the big chunk in the middle is a base64 encoded PNG. Absolutely not secure - since it's not encrypted in any way, but could be fairly easily

Related

How do I encode a large Data object for a URL in Swift?

I want to open my iOS application using a URL but my url appears to be too long? Is there a limit on the length of the URL? I've searched the web all day on this and it looks like there is no definitive answer. My url contains a base64EncodedString of an object and is about 1,500 bytes.
It looks like this:
MyApp://favorite?Class=eyJzZXR0aW5ncyI6eyJzY2FsZSI6WzAsNCwxMiwxOSwyMF0sImZyZXEiOjIyMCwidHVuaW5nIjoiZXlKelkyRnNZU0k2SWlGY2JpRWdjSFJ2YkdWdGVTNXpZMnhjYmlGY2JsQjBiMnhsYlhrZ01USWdibTkwWlNCelkyRnNaVnh1SURFeVhHNGhYRzRnTVRkY0x6RTJYRzRnT1Z3dk9GeHVJREU1WEM4eE5seHVJRFZjTHpSY2JpQTBYQzh6WEc0Z01URmNMemhjYmlBelhDOHlYRzRnTVROY0x6aGNiaUExWEM4elhHNGdOMXd2TkZ4dUlERTFYQzg0WEc0Z01sd3ZNVnh1SW4wPSIsInNvdW5kIjoiZXlKaGRIUnlhV0oxZEdWeklqcGJleUpoZEhSaFkyc2lPakl1TXprd01EQXdNREF3TURBd01EQXlMQ0prWldOaGVTSTZNQzR6TkRrNU9UazVPVGs1T1RrNU9UazVMQ0pwYzAxMWRHVmtJanBtWVd4elpTd2ljbVZzWldGelpTSTZNQzR6TlRJMU1EQXdNREF3TURBd01EQXhMQ0p3WVhKMGFXRnNJam93TGpVeExDSmhiWEFpT2pBdU1qTXpOelV3TURBd01EQXdNREF3TVN3aWMzVnpkR0ZwYmlJNk1IMHNleUpoZEhSaFkyc2lPakF1TWpVc0ltUmxZMkY1SWpvd0xqRXpOU3dpYVhOTmRYUmxaQ0k2Wm1Gc2MyVXNJbkpsYkdWaGMyVWlPakVzSW5CaGNuUnBZV3dpT2pFc0ltRnRjQ0k2TUM0M05Td2ljM1Z6ZEdGcGJpSTZNSDBzZXlKaGRIUmhZMnNpT2pBdU9URTFNREF3TURBd01EQXdNREF4TXl3aVpHVmpZWGtpT2pBdU5URXlOVEF3TURBd01EQXdNREF3TXl3aWFYTk5kWFJsWkNJNlptRnNjMlVzSW5KbGJHVmhjMlVpT2pBdU1qWXlOU3dpY0dGeWRHbGhiQ0k2TWk0eU5EazVPVGs1T1RrNU9UazVPVGdzSW1GdGNDSTZNQzR3T0RFNU9UazVPVGs1T1RrNU9UazVPU3dpYzNWemRHRnBiaUk2TUgwc2V5SmhkSFJoWTJzaU9qQXNJbVJsWTJGNUlqb3dMakkwTlN3aWFYTk5kWFJsWkNJNlptRnNjMlVzSW5KbGJHVmhjMlVpT2pBdU16Y3lOVEF3TURBd01EQXdNREF3TVN3aWNHRnlkR2xoYkNJNk5TNDNOREl3TURBd01EQXdNREF3TURFc0ltRnRjQ0k2TUM0d05UY3NJbk4xYzNSaGFXNGlPakI5WFN3aWJtRnRaU0k2SWtOc1pXRnlJRUpsYkd3aUxDSmtaWE5qSWpvaVNuVnpkQ0JoYm05MGFHVnlJR0psYkd3Z2MyOTFibVF1SW4wPSIsInRvbmUiOiJBIiwibXV0ZWQiOmZhbHNlfSwibmFtZSI6IlB0b2xlbXkgaW4gQSIsImRlc2MiOiJDbGVhciBCZWxsIn0=
I want to text or email this URL and then have the recipient tap on the link to open my app on their device.
The trouble is the link is wrapped in the mail and messages application and only the "MyApp://favorite?" part is marked in blue as a link. The remainder of the text is not part of the link.
Is there any way to send data like this via a URL?
This doesn't sound like it has anything to do with the URL itself or Swift. The problem you're describing is with "the mail and messages application." It sounds like you're sending the message in plaintext and relying on the data detector to find it. That's asking too much of the data detector, which is a heuristic guessing process. If you want to make it as a link, you should send it as an HTML mail, and mark it with <a href>.
Some notes on the format, though:
This data is double-base64-encoded, which is very wasteful. If you only encoded one time, this would be:
MyApp://favorite?Class=eyJzZXR0aW5ncyI6eyJzY2FsZSI6WzAsNCwxMiwxOSwyMF0sImZyZXEiOjIyMCwidHVuaW5nIjp7InNjYWxhIjoiIVxuISBwdG9sZW15LnNjbFxuIVxuUHRvbGVteSAxMiBub3RlIHNjYWxlXG4gMTJcbiFcbiAxNy8xNlxuIDkvOFxuIDE5LzE2XG4gNS80XG4gNC8zXG4gMTEvOFxuIDMvMlxuIDEzLzhcbiA1LzNcbiA3LzRcbiAxNS84XG4gMi8xXG4ifSwic291bmQiOnsiYXR0cmlidXRlcyI6W3siYXR0YWNrIjoyLjM5MDAwMDAwMDAwMDAwMiwiZGVjYXkiOjAuMzQ5OTk5OTk5OTk5OTk5OSwiaXNNdXRlZCI6ZmFsc2UsInJlbGVhc2UiOjAuMzUyNTAwMDAwMDAwMDAwMSwicGFydGlhbCI6MC41MSwiYW1wIjowLjIzMzc1MDAwMDAwMDAwMDEsInN1c3RhaW4iOjB9LHsiYXR0YWNrIjowLjI1LCJkZWNheSI6MC4xMzUsImlzTXV0ZWQiOmZhbHNlLCJyZWxlYXNlIjoxLCJwYXJ0aWFsIjoxLCJhbXAiOjAuNzUsInN1c3RhaW4iOjB9LHsiYXR0YWNrIjowLjkxNTAwMDAwMDAwMDAwMTMsImRlY2F5IjowLjUxMjUwMDAwMDAwMDAwMDMsImlzTXV0ZWQiOmZhbHNlLCJyZWxlYXNlIjowLjI2MjUsInBhcnRpYWwiOjIuMjQ5OTk5OTk5OTk5OTk4LCJhbXAiOjAuMDgxOTk5OTk5OTk5OTk5OTksInN1c3RhaW4iOjB9LHsiYXR0YWNrIjowLCJkZWNheSI6MC4yNDUsImlzTXV0ZWQiOmZhbHNlLCJyZWxlYXNlIjowLjM3MjUwMDAwMDAwMDAwMDEsInBhcnRpYWwiOjUuNzQyMDAwMDAwMDAwMDAxLCJhbXAiOjAuMDU3LCJzdXN0YWluIjowfV0sIm5hbWUiOiJDbGVhciBCZWxsIiwiZGVzYyI6Ikp1c3QgYW5vdGhlciBiZWxsIHNvdW5kLiJ9LCJ0b25lIjoiQSIsIm11dGVkIjpmYWxzZX0sIm5hbWUiOiJQdG9sZW15IGluIEEiLCJkZXNjIjoiQ2xlYXIgQmVsbCJ9
which saves over 350 bytes over your current approach.
If you run this through gzip before Base64-encoding it, it'd be a third of this size (~550 bytes). And using a binary format, you could probably get this down to ~200 bytes (after base64-encoding) without even getting clever.
That said, URLs are perfectly capable of handling data of this size. I suspect your problem is just asking heuristic systems to detect the URL rather than marking exactly where it is with HTML.

Rails use base64 with user id in url?

I've been looking into the benefits of using base64 in urls and for files and I like the idea, and I can't seem to find anywhere to start. I have played around on the console encoding my picture urls too base64 which works okay(I can access it in the html decoding it in the view),
My question would be how would I do this for urls? Instead of using 1.. 2.. 3 for my users, I would like to try and use base64 for the 'users/1' instead so it would be something like 'users/U3Rvcm1WaXBlcg' for example
Not exactly, lets take discord as an wonderful example, you can copy someone's userID and then it in a base64 encoder, and boom you have the first part of someone's token. The ID in decoded is someone's token.

Can PDF user password be used to remove encryption?

It seems that Portable Document Format (PDF) tools, even open-source software, require that the master password of an encrypted document be supplied to convert the PDF file to an unencrypted version. I am in a situation in which I have the user password but not the master password. Is there any particular reason (algorithmic or encryption-related) that the master password is technically required to convert the file and that the user password is not enough, or is this difference merely a policy enforced by the application itself? Common sense tells me that if the user password is enough for a program to parse and display the PDF file, then that should technically be enough to save the decrypted contents to a converted file as well. This makes me wonder if the third-party software enforces the master/user password difference just for the sake of principle or perhaps out of fear of lawsuits from Adobe...
Are there any applications that can convert a PDF file with only knowing the user password and not the master password? Am I missing something here?
ok. Here is the easy solution.
Open the PDF with Google chrome.
Enter the password.
Print document using Ctrl+p.
Choose Save as PDF option.
Done.
Since it's a copy of original PDF without any securities, you can try anything with the new PDF.
Yes, it's technically possible - indeed, easy.
Years ago, there was some language in the old PDF reference manual implying that, since the syntax of PDF operators was copyright Adobe, it would be illegal to ship software which allowed decryption against Adobe's wishes. Not being a lawyer, I don't know if that actually had any force.
I can't find any similar language in the new ISO 32000 standard, so I don't know what Adobe rely on now, other than goodwill.

MD5 in ActionScript

I am trying to build a web based flash application. I am quite new to flash. I would like to develop it in two forms - demo and paid version. For this application to act as a paid version I need to have some kind of serial key. In order to achieve this I googled and came across something like this
MD5(MD5(thisuri)+thisuri)
I think 'thisuri' points to the current url page but I don't know how to get that url and I don't know whether '+' acts as a character or an operator.
Can you please help me?
It seems that a library exists in AS3.0 : as3corelib
An ActionScript 3 Library that contains a number of classes and utilities for working with ActionScript? 3. These include classes for MD5 and SHA 1 hashing, Image encoders, and JSON serialization as well as general String, Number and Date APIs.
To use it, just download the zip file, decompress it and copy the contents of "src" directory to the root of your project.
Then in your actionscript code, simply do the following :
import com.adobe.crypto.MD5;
var hash:String = MD5.hash(”test”);
source in french
To add to #Julien's recommendation of using as3corelib, you will also need the advice from this post to get the current url: Get Current Browser URL - ActionScript 3
Somehow I think there's a more elegant way to get the url, but I don't remember it.
While this may provide you with some basic check for the paid version, a determined hacker will easily fool this algorithm. For example, I could fool the environment into thinking that its being served from a domain that you've registered as part of the "paid" version. Also, since the client has the flash code, they can decompile the binary and potentially see the algorithm you're using. Depending on what you're offering in the app, this extreme case may or may not be acceptable to you.
Look into more secure authentication mechanisms if you're serious about security.

Generating a QR code in rails

I want to generate QR codes in ruby on rails, to run in the background of my website written in rails. Saw this http://code.google.com/p/qrcode-rails/ but cannot work out how I could get this to work for me. Basically in RoR I want to:
Pass a generator a string, my unique code, a 20 character length number (e.g. 32032928889998887776) and have an image generated with the name 'code'_qr.jpg and saved in a resource folder to be attached to an email that my program will send out.
How would I do this, does anyone know?
And while I'm asking (not so important that I get this answer now) but how would I implement QR code reading in, to get that code back, from a web cam? Thanks.
If you just need to write the data from the URL to a file, you can open up a stream, read from the file, and simply write the data to disk -- just remember to use the same extension (.jpg in this instance.)
Note that you could also simply send the link in the email (or post it as an inline image in the email.) If you really, really want to write it to disk and send it as attachment in your production system, the first-class solution for Ruby image processing is ruby-vips or ImageMagick.
Finally, since it's a disk operation, you're going to want to do it outside the normal web request cycle -- you're probably best off farming the operation out with delayed_job, or at the very least triggering the process with an AJAX request. Both of these give you the advantage that you can present a progress bar for the operation.

Resources