Verrouiller un fichier PDF  (Lu 368 fois) Partager ce sujet Imprimer

1 B


michel c.  05 juillet 2021 : 21:18

Bonjour,

je voulais savoir si il est possible de verrouiller un fichier PDF de manière à ce que les scripts fonctionnent mais que ceux-ci ne puissent pas être lus, édités ni modifiés même pour les personnes disposant d'un éditeur PDF.
Je précise que je ne travaille pas avec l'éditeur d'Adobe mais avec PDF x change editor (je ne trouve pas comment faire, mais si c'est possible avec Acrobat, ça doit surement être faisable avec ce logiciel)
Merci

IP archivée


michel c.  06 juillet 2021 : 06:46

Je viens de trouver....

IP archivée


bebarth  06 juillet 2021 : 08:30

bonjour,
…et bravo mais je pense que cette réponse ne va pas intéresser grand monde si tu n’expliques pas comment !
@+
 :bonjour:

IP archivée


Merlin  06 juillet 2021 : 12:38

Bonjour

Oui, ça serait sympa de partager le truc parce-que ça fait plus d'une décennie que je cherche comment faire.
 

IP archivée


michel c.  06 juillet 2021 : 15:22

Bonjour, après vérification, ça a l'air de fonctionner sur les scripts associées à des boutons ou a des champs mais cela ne masque pas les scripts du document.
Voici une vidéo montrant ce que je fais (sur un fichier téléchargé sur ce forum) : Lien

Et un lien vers le fichier : Lien

IP archivée


Merlin  06 juillet 2021 : 19:09

Ça ne protège que contre les grand-mères et ceux qui ne savent pas utiliser Googol, il existe des dizaines de sites et d'utilitaires comme celui-ci :
https://smallpdf.com/fr/unlock-pdf

 :geek:

IP archivée


michel c.  06 juillet 2021 : 19:38

Ça ne protège que contre les grand-mères et ceux qui ne savent pas utiliser Googol, il existe des dizaines de sites et d'utilitaires comme celui-ci :
https://smallpdf.com/fr/unlock-pdf

 :geek:
Mince, je ne pensais pas que ce type de protection ne valait pas un clou...

IP archivée


Merlin  07 juillet 2021 : 10:47

En fait Adobe appelle ça des "Restrictions d'utilisation", ce n'est pas vraiment une protection, c'est plutôt fait pour éviter les manipulations malencontreuses ou hasardeuses.

Contrairement au "mot de passe à l'ouverture" qui est une vraie protection (comme la protection par Certificat).

IP archivée


michel c.  07 juillet 2021 : 12:30

J'ai déjà téléchargé des pdf dont le menu formulaire était verrouillé. Comme celui ci ? Lien
Mon éditeur me précise que les les fonctionnalités d'édition sont limitées car le document contient un formulaire XFA dynamique.
D'après ce que j'ai lu ICI, cela veut dire que ce type de formulaire pdf est tout de même modifiable avec Adobe Designer ?

IP archivée


Merlin  07 juillet 2021 : 12:57

Les formulaires PDF-XFA ne sont pas des documents PDF, ils utilisent un format propriétaire basé sur XML qui a été encapsulé dans une coquille PDF quand la société créatrice a été rachetée par Adobe dans les années 90.

Ces formulaires sont pleinement éditables avec Designer et pas du tout avec Acrobat, mais c'est une question de format, pas de protection.

IP archivée


Merlin  07 juillet 2021 : 13:10

Sinon, pour répondre à ton interrogation le moyen de plus souple que j'ai trouvé pour protéger mes scripts c'est de les "minifier", c'est-à-dire de les réduire juste à ce dont la machine à besoin.
https://www.it-connect.fr/quest-ce-que-la-minification/
https://javascript-minifier.com/
https://jscompress.com/

On peut aussi "obfusquer" les scripts, c'est-à-dire minifier + rendre difficile à lire (ce n'est pas du chiffrage), mais l'inconvénient c'est que la plupart des antivirus et antispams rejettent les PDF dont les scripts sont obfusqués, puisqu'ils ne peuvent pas lire les scripts et qu'ils sont justement faits pour éviter les scripts malicieux.

IP archivée


michel c.  07 juillet 2021 : 13:51

Donc pas de possibilité d'avoir une forme de propriété intellectuelle sur des scripts inclus dans les pdf. Si vous vendez à un client des formulaires, rien n’empêche l'échange et la diffusion des scripts inclus dans les documents ?

IP archivée


Merlin  07 juillet 2021 : 14:16

Si bien sur, tu as la propriété intellectuelle du script.
Il faut voir ça comme un roman ou un article, tu en es l'auteur, tu en as les droits et tout le monde peut le lire.

La différence c'est qu'on peut publier nos scripts sans mise en page, sans espace, sans ponctuation, etc. en les minifiant.
On peut aussi les noyer dans un flot de fonctions redondantes ou inutiles.  :geek:

L'idée c'est de rendre la copie ou la réutilisation du script plus compliquée qu'une création ex nihilo.
L'expérience montre que même s'il est soigneusement commenté et avec des variables bien nommées il est toujours difficile de reprendre un script (complexe) qu'on n'a pas créé, alors reprendre un script "unminified" (déminifié) brut de décoffrage… Bon courage !  :mur:

IP archivée


bebarth  07 juillet 2021 : 16:41

bonjour,
Effectivement, si le décryptage d'un script minifié n'est pas impossible, ça demande un petit niveau quand même !
Et si la personne a un certain niveau en JavaScript, ça lui prendra certainement plus de temps à décrypter et interpréter un script qu'à en re-écrire un.
En minifiant, les noms des variables que l'on a soigneusement nommés pour mieux les interpréter sont renommés avec des lettres et les égalités, conditions etc sont réécrites avec un script minimum.
Voici par exemple une fonction telle que je l'ai écrite :
function simplify(str) {
    var result="";
    var data=str.split("/");
    var numOne=Number(data[0]);
    var numTwo=Number(data[1]);
    for (var i=Math.max(numOne,numTwo); i>1; i--) {
        if (numOne%i==0 && numTwo%i==0) {
            numOne/=i;
            numTwo/=i;
        }
    }
    if (numTwo===1)  result=numOne.toString();
    else result=numOne.toString()+"/"+numTwo.toString();
    return result;
}
MInifiée, elle donne :
function simplify(t){for(var r=t.split("/"),i=Number(r[0]),n=Number(r[1]),o=Math.max(i,n);o>1;o--)i%o==0&&n%o==0&&(i/=o,n/=o);return 1===n?i.toString():i.toString()+"/"+n.toString()}Ensuite, re-écrite plus proprement avec Online javaScript beautifier (https://beautifier.io/) :
function simplify(t) {
    for (var r = t.split("/"), i = Number(r[0]), n = Number(r[1]), o = Math.max(i, n); o > 1; o--) i % o == 0 && n % o == 0 && (i /= o, n /= o);
    return 1 === n ? i.toString() : i.toString() + "/" + n.toString()
}
Tu vois, ce n'est quand même pas pareil !
Si tu minifies un script, n'oublie donc pas de garder une version originale, car même toi, tu auras un peu de mal à relire ce script...
@+
 :bonjour:

IP archivée