On Mar 28, 2014, at 7:51 PM, Bob Sneidar wrote: > Not sure about the inserting of pages, but you can store and “reassemble” a > pdf by opening it as read binary, reading it into a variable, then saving the > variable either as a property or stored in a database, or even encrypted in a > file on the HD. (Not sure what the app would be for that…) I’ve often thought > of storing my PDF forms in a database this way instead of on the HD.
Richard Gaskin's fwPack/fwUnPack functions make this easy. -- Peter Peter M. Brigham pmb...@gmail.com http://home.comcast.net/~pmbrig ------------- function fwPack pData, pPassword, pEncryptionMethod -- fwPack/fwUnPack -- based on routines by Richard Gaskin, Fourth World Software -- Generic functions for packing data for Internet transmission or storage, -- with an optional modest level of password-protected security. -- -- In the simplest form, fwPack() compresses data with gzip and -- then encods it with Base64 for robust storage or transmission. -- -- Data can be optionally protected by supplying a password and -- an encryption method to the fwPack() function, -- and subsequently the same password to the fwUnPack() function -- pEncryptionMethod = "00" -- no encryption, just compress it -- pEncryptionMethod = "01" uses MD5digest -- fast but only moderately secure -- pEncryptionMethod = "02" uses SHA1digest -- more secure. However: -- DO NOT USE THIS ALGORITHM IF YOU REQUIRE INDUSTRIAL-STRENGTH ENCRYPTION. -- if no password supplied, defaults to no encryption -- if password supplied but no encryption method specified, -- defaults to MD5digest if LC version < 4.6 -- otherwise defaults to SHA1digest -- inverse function is fwUnPack() -- requires fwUnpack(), _doXor() -- _doXor() is a private function if pPassword is empty then put "00" into pEncryptionMethod -- no encryption else if pEncryptionMethod = empty then -- password supplied but pEncryptionMethod unspecified, -- default to SHA1digest if possible: put the version into tVersion replace "." with empty in tVersion put "." after char 1 of tVersion put tVersion >= 4.6 into canUseSHA -- SHA1 only available with LC ≥ 4.6 if canUseSHA then put "02" into pEncryptionMethod else put "01" into pEncryptionMethod end if end if switch pEncryptionMethod case "00" -- just compress: put compress(pData) into dataOut break case "01" -- compress then scramble with MD5-encrypted password: put compress(pData) into pData put md5digest(pPassword) into tKeyString put _doXor(pData,tKeyString) into dataOut break case "02" -- compress then scramble with SHA1-encrypted password: put compress(pData) into pData put sha1digest(pPassword) into tKeyString put _doXor(pData,tKeyString) into dataOut break end switch -- mark with encryption method: put pEncryptionMethod before dataOut -- Convert to common low ASCII: return base64encode(dataOut) end fwPack function fwUnPack pData, pPassword -- fwPack/fwUnPack -- based on routines by Richard Gaskin, Fourth World Software -- Generic functions for packing data for robust internet transmission or storage, -- with an optional modest level of password-protected security. -- -- fwPack() compresses data with gzip, optionally encrypts it with a password, -- then encodes it with Base64. -- -- fwUnPack() will unpack (and decrypt as needed) data compressed with fwPack() -- requires fwPack(), _doXor() -- _doXor() is a private function -- Convert from base64 back to binary: put base64decode(pData) into pData -- Check and remove password-protection flag: put char 1 to 2 of pData into tEncryptionMethod delete char 1 to 2 of pData -- switch case tEncryptionMethod = "00" --no encryption put pData into dataOut break case tEncryptionMethod = "01" -- MD5 -- Get MD5 digest: put md5digest(pPassword) into tKeyString put _doXor(pData,tKeyString) into dataOut break case tEncryptionMethod = "02" -- SHA1 -- get SHA1 digest try put sha1digest(pPassword) into tKeyString catch tErr answer "You must be running LiveCode version 4.6 or higher!" as sheet exit to top end try put _doXor(pData,tKeyString) into dataOut break end switch -- Attempt to decompress data, throwing an error if not valid: try put decompress(dataOut) into clearData catch errNo answer "Wrong password" as sheet exit to top end try return clearData end fwUnPack private function _doXor pData,tKeyString -- utility function for fwPack(), fwUnPack() put len(tKeyString) into tKeyStringLen put 0 into i put empty into dataOut repeat for each char k in pData add 1 to i put char (i wrap tKeyStringLen) of tKeyString into tKeyChar put numtochar(chartonum(k) bitxor chartonum(tKeyChar)) after dataOut end repeat return dataOut end _doXor _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode