├── app.html
└── app.js
/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Image Encryption
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 |
2 | let messages = {
3 | "error_0" : "something went wrong, please try again",
4 | "error_1" : "extension not supported, please try again"
5 | }
6 |
7 | let canvas = document.getElementById("board");
8 | let canvasCtx = canvas.getContext("2d");
9 | let imgFile = null;
10 | let imgExt = null;
11 | let cryptX = 4;
12 | let cryptY = 1;
13 | let allowedExtensions = ["jpeg","png"];
14 |
15 | function ENDECrypt(imgData){
16 | imgFile = imgData.files[0];
17 | if(imgFile){
18 | imgExt = (imgFile.type).split("/")[1]; // uploaded img extension
19 | if(allowedExtensions.includes(imgExt)){
20 | let reader = new FileReader();
21 | reader.readAsDataURL(imgFile);
22 | reader.onload = function(){
23 | let tempImage = new Image();
24 | tempImage.src = reader.result;
25 | tempImage.onload = function(){
26 | let iW = canvas.width = this.width;
27 | let iH = canvas.height = this.height;
28 | canvasCtx.drawImage(tempImage, 0, 0, iW, iH);
29 | let pxlArray = Array();
30 | let subScore = 0;
31 | let pxlData = canvasCtx.getImageData(0,0,cryptX,cryptY).data;
32 | for(let l = 0; l < pxlData.length; l+=4)
33 | pxlArray.push({
34 | 0: pxlData[l],
35 | 1: pxlData[l+1],
36 | 2: pxlData[l+2]
37 | });
38 | for(let j = 0; j < pxlArray.length; j++){
39 | if(j+1 <= pxlArray.length){
40 | let k1 = pxlArray[j][0]+1 == pxlArray[j][1];
41 | let k2 = (pxlArray[j][0]+1) + (pxlArray[j][1]);
42 | if(k1 && (k2 == pxlArray[j][2]))
43 | subScore++;
44 | }
45 | }
46 | if(subScore==cryptX*cryptY){ // encrypted
47 | let tokenIndex = pxlArray[0][1];
48 | let n1 = tokenIndex-1,
49 | n2 = tokenIndex,
50 | n3 = tokenIndex*2;
51 | let nImgData = canvasCtx.getImageData(0, 0, iW, iH);
52 | let nImgPixels = nImgData.data;
53 | for(let k = 0; k < nImgPixels.length; k+=4){
54 | let m1 = nImgPixels[k],
55 | m2 = nImgPixels[k+1],
56 | m3 = nImgPixels[k+2];
57 | for(let q = 0; q < 256; q++) // for red
58 | if((n1*q)%255==m1){
59 | nImgPixels[k] = q;
60 | break;
61 | }
62 | for(let q = 0; q < 256; q++) // for green
63 | if((n2*q)%255==m2){
64 | nImgPixels[k+1] = q;
65 | break;
66 | }
67 | for(let q = 0; q < 256; q++) // for blue
68 | if((n3*q)%255==m3){
69 | nImgPixels[k+2] = q;
70 | break;
71 | }
72 | }
73 | canvasCtx.putImageData(nImgData,0 ,0);
74 | }else{ // not encrypted
75 | let tokenIndex = Math.floor(Math.random() * 128);
76 | tokenIndex = (tokenIndex > 127) ? 127 : tokenIndex;
77 | let t1 = tokenIndex-1,
78 | t2 = tokenIndex,
79 | t3 = tokenIndex*2;
80 | let tImgData = canvasCtx.getImageData(0, 0, iW, iH);
81 | let tImgPixels = tImgData.data;
82 | for(let k = 0; k < tImgPixels.length; k+=4){
83 | if(k < cryptX*cryptY*4){
84 | tImgPixels[k] = t1;
85 | tImgPixels[k+1] = t2;
86 | tImgPixels[k+2] = t3;
87 | }else{
88 | let p1 = tImgPixels[k],
89 | p2 = tImgPixels[k+1],
90 | p3 = tImgPixels[k+2];
91 | tImgPixels[k] = (p1 * t1) % 255;
92 | tImgPixels[k+1] = (p2 * t2) % 255;
93 | tImgPixels[k+2] = (p3 * t3) % 255;
94 | }
95 | }
96 | canvasCtx.putImageData(tImgData,0 ,0);
97 | }
98 | }
99 | }
100 | }else{
101 | alert(messages["error_1"]);
102 | }
103 | }else{
104 | alert(messages["error_0"]);
105 | }
106 | }
--------------------------------------------------------------------------------