Comment puis-je chiffrer le code JavaScript de sorte qu'il ne soit pas décryptable?

J'ai un code JavaScript que j'ai besoin de chiffrer, mais je veux m'assurer que personne ne peut le déchiffrer.

Quels outils puis-je utiliser pour faire cela?

— Modifier —

Je veux toujours exécuter le code sur mon site, je veux juste m'assurer que personne d'autre ne peut déchiffrer le code.

    Le code Javascript est exécuté dans le navigateur, c'est-à-dire sur le côté client, ce qui signifie qu'il doit être disponible non chiffré du côté client.

    Le «meilleur» que vous pouvez faire est probablement de le miniser, ce qui rendra plus difficile de le comprendre – et un peu d' obscurcissement pourrait le faire aussi – même si quelqu'un vraiment motivé sera toujours capable de le lire.

    Voir par exemple le compresseur YUI , qui peut à la fois minimiser et obscurcir le code JS.

    Si vous voulez vraiment le chiffrer afin que personne d'autre ne puisse le décrypter, vous pouvez utiliser l'un des nombreux cryptages. Par exemple, pour le faire manuellement, vous pouvez utiliser TrueCrypt ; Ou pour le faire par programmation, utilisez les bibliothèques de cryptage disponibles dans la plupart des langues .

    Si ce que vous demandez vraiment, cependant, c'est comment obscurcir le code afin que personne ne puisse l'inverser, la réponse est: vous ne pouvez pas , en Javascript ou dans n'importe quelle autre langue. Le meilleur que vous pouvez faire est de rendre plus difficile l'ingénierie inverse en rendant difficile la lecture; Pour cela, il existe un certain nombre d'outils:

    • Javascriptobfuscator.com
    • Omeugle javascript
    • ObfuscateJS

    Il n'y a aucun moyen de le faire. Vous pouvez l'obscurcir et avoir un code de contrôle de domaine. Ou vous pourriez l'avoir servi avec un script côté serveur qui vérifie le domaine référent.

    Il n'y a aucun moyen de le faire car, en fin de journée, le code doit toujours être exécuté, non chiffré, sur la machine client, ce qui signifie que la routine de décryptage du code doit être envoyée aux côtés du code chiffré. Vous tournez à la fois le verrou et la clé, tout ce qu'ils ont à faire est de passer.

    Votre meilleur moyen est de l'exécuter à travers un obscurcisseur, mais même alors, ce n'est pas comme si quelqu'un ne pouvait pas le réécrire seul sans avoir à essayer de lire votre code de toute façon.

    Je pense que vous êtes en train de confondre le chiffrement avec le binaire compilé .

    Même les logiciels commerciaux fermés tels que Microsoft Office ou Adobe Photoshop sont cryptés pour distribution. Mais ils sont compilés sur le code de machine natif, ce qui les rend difficiles à faire de l'ingénierie inverse.

    JavaScript n'a pas de binaire compilé. Mais, à mesure que de plus en plus de navigateurs passent à la compilation de bytecode pour obtenir des performances plus rapides, nous aurons un jour un format de source JavaScript compilé. Peut-être, de manière analogue aux fichiers .py et .pyc de Python, peut-être que nous aurons un .jsc ou JavaScript compilé, qui peut être livré au navigateur sous forme binaire, pour s'exécuter dans sa machine virtuelle JavaScript.

    Il n'en existe pas encore une telle chose. Et même si cela l'a fait, ce n'est qu'une obstruction plus intense. L'obfuscation est bien pour empêcher la copie et le partage occasionnels, mais si vous avez vraiment besoin de protéger votre propriété intellectuelle, déplacez le serveur logique .

    Bien qu'il ne soit pas crypté, le compresseur YUI de Yahoo compressera et obscurciera votre JavaScript pour une utilisation normale et fournira une meilleure compression que JSMin .

    Ce que vous voulez est théoriquement et pratiquement impossible. Les gens vous diront ici que ce n'est pas possible et vous pourriez penser "Eh bien, c'est parce que personne n'a essayé assez". Non. C'est impossible de la même façon que le calcul du n ° nombre premier en temps linéaire ou constant est impossible. Il est impossible de la même manière que le problème d'arrêt est impossible à résoudre. "Qu'est-ce que tu veux dire 2 + 2 n'est pas égal à cinq? Tu n'essaies pas assez!"

    Non seulement il est impossible, mais les motivations pour vouloir ce genre de chose sont normalement assez mal orientées. C'est toujours une erreur fondamentale d'essayer d'utiliser la technologie pour résoudre un problème qui est fondamentalement un problème juridique. Vous voulez protéger votre code contre les "pirates" ou les concurrents, peut-être? Il n'est pas probable que vous ayez écrit quelque chose qui vaut le coup, mais si vous l'avez, et vous ne voulez pas que les gens le voient, votre seul véritable recours est la règle de droit.

    Cependant, sur un plus grand niveau, votre problème ne sera probablement pas concurrentiel ou les pirates volent votre code. Votre problème va être axé sur les entreprises: Obtenir un public grâce à un produit de qualité, au bon prix et avec un marketing suffisant. Vous faites cela bien, quelqu'un qui vole votre code n'a pas d'importance. Vous le faites bien, et l'original authentique apparaîtra comme ayant une valeur réelle. En fait, si vous libérez votre matériel open source, cela ne peut vraiment vous aider, car alors vous avez une armée d'amateurs intéressés qui travaillent pour vous gratuitement, potentiellement. Le piratage et l'ingénierie inverse sont en fait un don, car cela signifie que les gens sont assez intéressés dans votre produit pour vouloir l'améliorer. La meilleure chose est de faire tout ce que vous pouvez pour que cela se produise.

    Si votre entreprise dépend vraiment de garder un secret javascript, vous avez essentiellement fait une erreur dans votre plan d'affaires à l'étape 1.

    Si votre entreprise vend une bibliothèque javascript (ces choses existent!), Vous n'êtes pas pire que tout autre vendeur de logiciels. La meilleure chose à faire est de le commercialiser vers des entreprises honnêtes qui n'ont aucun problème à vous donner de l'argent. Les personnes qui piratent vos affaires n'avaient pas l'intention de vous payer de toute façon, et ont un inconvénient fondamental qu'elles ne reçoivent pas votre support technique ou des mises à jour régulières de maintenance.

    Si ce n'est pas un effort commercial, alors je ne sais vraiment pas pourquoi vous dérangez même. Un crédit approprié?

    Microsoft a utilisé pour exécuter Script Encoder pour coder votre JavaScript (et ASP et VBScript, etc.) mais le script encodé ne fonctionnait que dans Internet Explorer, donc c'était un grand non-non ( lien )

    De nos jours, seule une obstruction est une option. Mais vous pouvez briser toute obscurité avec des outils comme le Beautifyier JavaScript en ligne, donc vous avez de la chance. Vous pouvez minimiser et vous pouvez obscurcir, mais vous ne pouvez vraiment pas cacher ce que vous faites.

    Le meilleur minimiseur / obstructeur est probablement le compilateur de fermeture de Google – il est très avancé et peut transformer votre code en quelque chose qui est à peine compréhensible.

    Ce que vous recherchez, c'est l' obscurcissement , et non le cryptage. Il existe des outils tels que JSMin et le Compresseur YUI qui rendront votre code très illisible, au point que personne ne voudrait essayer de le comprendre. Cependant, il n'y a aucun moyen de le faire afin que quelqu'un ne puisse pas le copier et le coller sur son propre site Web et l'exécuter là-bas. Je ne m'en soucierais pas, honnêtement, parce que vous étiez perdu votre temps à essayer de protéger quelque chose qui ne peut être protégé. Essayez de mettre toute votre logique "importante" sur le côté du serveur, si possible, car c'est la seule façon infaillible de le faire. Si le navigateur peut y accéder, il en va de même pour quelqu'un d'autre.

    Je ne pense pas que vous voulez un chiffrement, sauf si vous allez écrire une extension de navigateur qui peut décrypter le javascript.

    Je sais GWT, ou même jsmin peut suffisamment compresser / obscurcir votre javascript pour une utilisation normale.

    Si vous souhaitez attacher un code côté client à votre site, vous voudrez peut-être considérer une sorte de poignée de main aléatoire qui dépend d'une méthode côté serveur pour «valider» le javascript. Je ne sais même pas si cela est possible.

    C'est exactement DRM: vous mettez un verrou sur l'utilisateur, et aussi la clé, et vous attendez à pouvoir dire ce qu'ils peuvent faire avec lui.

    Il est théoriquement impossible: si leur ordinateur peut exécuter le code, il ne doit pas y avoir de chiffrement.

    C'est aussi pratiquement impossible: regardez tout le monde regarder des DVD sur des boîtes Linux pour voir à quel point vous pouvez être performant.

    Utilisez cet outil: Javascript Obfuscator https://javascriptobfuscator.com/Javascript-Obfuscator.aspx