{"id":15601153,"url":"https://github.com/hacknlove/kissmycipher","last_synced_at":"2026-05-28T16:30:54.192Z","repository":{"id":77996001,"uuid":"314772001","full_name":"hacknlove/kissmycipher","owner":"hacknlove","description":"symmetric-key cipher as strong as you need, It is full customizable, based on PRNG and xor operations, and its code is short and clean without anything obscure or hard to understand","archived":false,"fork":false,"pushed_at":"2021-09-12T12:48:57.000Z","size":15,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-20T16:24:45.567Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hacknlove.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-21T09:01:45.000Z","updated_at":"2024-04-25T02:42:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"55852168-01f4-49e0-b0eb-b2e04dcee1d0","html_url":"https://github.com/hacknlove/kissmycipher","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hacknlove/kissmycipher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacknlove%2Fkissmycipher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacknlove%2Fkissmycipher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacknlove%2Fkissmycipher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacknlove%2Fkissmycipher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hacknlove","download_url":"https://codeload.github.com/hacknlove/kissmycipher/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hacknlove%2Fkissmycipher/sbom","scorecard":{"id":452293,"data":{"date":"2025-08-11","repo":{"name":"github.com/hacknlove/kissmycipher","commit":"835b0f5dc04561100f6da325ccead511c136d0fb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/9 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T08:31:02.271Z","repository_id":77996001,"created_at":"2025-08-19T08:31:02.271Z","updated_at":"2025-08-19T08:31:02.271Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33617718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T02:18:48.976Z","updated_at":"2026-05-28T16:30:54.187Z","avatar_url":"https://github.com/hacknlove.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kissmycipher\n\nSymmetric-key cipher for browser and node, fully customizable and as strong as you need.\n\n## v2.0.0\nThis version uses a new default serializer more eficient in size, and also it fixes a bug that prevent unicode characters from being correctly encrypted/decrypted\n\nBut, it's incompatible with previous version.\n\nAnything encripted with v1 cannot be decrypted with v2, and viceversa.\n## Examples\n\n```javascript\nconst { encrypt, decrypt } = require('kissmycipher')\n\n// Text encryption - decryption\nencrypted = encrypt('password', 'hola mundo')\n// -\u003e 'tyPreEM5O9QQI6HjapMVd_pB4RnJS5BKKGSSvpL2TU2e5ZiDL-rqsvkv2w'\ndecrypt('password', encrypted)\n// -\u003e 'hola mundo'\n\n// Object encryption - decryption\nencrypted = encrypt('password',  {hello: ' world'})\n// -\u003e 'epTDSyPjELSzeCBUyUFF6V16reXNUKdYkOG0HxzArBNQjUKwGHD412D5xRNsYw'\ndecrypt('password', encrypted)\n// -\u003e { hello: ' world' }\n\n// Change strength\nencrypted = encrypt('password', 'hola mundo', { strength: 500 })\n// -\u003e 'jbmiSqYLmh8LrEkNmrO8Fet-5qHJWITpw5AbWW0I-gX7mE7ILlNPvCzhr8zy-r4xqd60RR3TLlHUyBtsxceW-kKGWhDPVj0DXIUv4KWK4gEQDwEONNLHlvsql3aBpi8RoIsRbzcu0FFb5Wz4mXM134c5NWTeD6QPZMIF5EDtHudVl-GORhibrf3IqcdlIQzFcDmw_bCLnMlQ3w67QRqMnMrrnZAdy4exjDNexKU8gx8irR1e50zzfuzQfRdEgkjGtCa3ko015io2lSb9qAtOL_RtL5xSLsHkYNt1icgextAxTy3Od6SDDLBv3AQR0fv1JKqsap0mIffZrJ-nSszvC2X2Yl6zC8fpmXSXbtZx_pOy5fekNg3Z3PqUq7jGtwawImf0x2KLtcpmIwlO3CIs56qsDac7F3ckGoQm5rtdVPXkxGoNB5hgsrJnZELQi0VpLdGihaiV-N7yTkIYzA_QEg6YSyEfmJJtIYIoQYp56rU-haF84TkeRtexf2SipNkNQsnS_LF81hl51z4xsXlQPdMhKCmOIV0yYQKI2NMX2WlEaICYYRVUCxJDdfes1Y-Wkprdge9iDoN0T39FYcYNfi3Lig4GlmVb8_BqFvk1hwv0ATgXT6pkRqN9Qo4-5nZBMH_wZi0uBu62qwWthzOz1vd72DaXkhVrOHiiEkjSuQ'\ndecrypt('password', encrypted, { strength: 500 })\n// -\u003e 'hola mundo'\n\n// Use a different PRNG\nconst seedrandom = require('seedrandom')\nencrypted = encrypt('password', 'hola mundo', { prng: seedrandom.xorwow })\n// -\u003e 'GHwmfiAJzMSqvCsYRAD55XXup0e3Qs6GLsJol2s35fg5c9txiZeL3K4-eQ'\ndecrypt('password', encrypted, { prng: seedrandom.xorwow })\n// -\u003e 'hola mundo'\n\n// using a different serializer/deserializer\nconst bencode=require('bencode')\nencrypted = encrypt('password', 'hola mundo', { serializer: bencode.encode })\n// -\u003e '422wH8VTvpPJhVeB_sJmSmVH426UABXj2GQfqcOX_Vh00YLs-jXiKkSshyaG'\ndecrypt('password', encrypted, { deserializer: (bytes) =\u003e bencode.decode(bytes, 'utf-8')})\n// -\u003e 'hola mundo'\n\n\n```\n\n## Reference\n\n### `encrypt(password, data, [options]) -\u003e encrypted`\n\n#### password\nPassword must be a string.\nThe longer the better. \n\n#### data\nit can be anything, serializable.\n\n#### options.prng\nYou can set a different pseudorandom number generator.\n\nIt should be a function that accepts an integer seed, and it should return an object with the method int32 that returns the pseudo random numbers.\n\nIt defaults to seedrandom\n\n#### options.serializer\nYou can set a different serializer. It should be a function that returns an array of numbers, or Uint8Array.\n\n#### options.strength\nThe greater the number the stronger the encryption. \n\nWarning: It increses the size of the encrypted data.\n\n#### encrypted\nThe response of the function is an url compatible Base64 encoded string.\n\n### `decrypt(password, encrypted, [options]) -\u003e data`\n\n#### password\nIt must be the same password that has been used for encryption\n\n### encrypted\nIt must be the encrypted data\n\n#### options.prng\nIt must be the same prng used for the encryption.\n\n#### options.serializer\nYou can set a different serializer. It should be a function that returns an array of numbers, or Uint8Array.\n\n#### options.strength\nThe greater the number the stronger the encryption. It increses the size of the encrypted data.\n\n### conf\nyou can use the object conf to set the default configuration, instead of passing once and again your custom configuration to encrypt and decrypt\n\n**Example:**\n```\nconst { conf } = require('kissmycipher')\n\nconf.strength = 64\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhacknlove%2Fkissmycipher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhacknlove%2Fkissmycipher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhacknlove%2Fkissmycipher/lists"}