>> Zie ook : RSA encoding
RSA encrypt with serverside key generator
fill this form with samples »

Safe fields to be encrypted

  • account number
  • card number


Regular fields

  • Sex: Male Female
  • city
  • E-Mail:
  • What would you like to eat? Pizza Hamburger Salad Döner Kébab
  • Age:
  • I like (you can select more than one):
  • Leave a message
  • dummy






Uitleg

encrypt.js

Deze module is flexibel inzetbaar om gegevens veilig te versturen naar de server.
De velden account number en card number worden versleuteld volgens het RSA-algoritme.
Tijdrovende berekeningen vinden op de server plaats, waardoor de module behoorlijk snel is.
Een tweede beveiligingslaag is ingebouwd door een clientsidehash en een serversidehash te vergelijken, pas als de twee gelijk zijn wordt er actie ondernomen. Op deze manier is een zgn 'Man In The Middle-attack' vrijwel onmogelijk geworden.

Meer informatie

Voorbeeld van gebruik :

$(document).ready(function(){
            
    $.extend(Util);//tools object
    $.extend(RequestManager);//xhr object
    $.extend(RSA);//encrypt object

    $.rsaGetKey(init);//get server key and pass onsuccess callback function
    
    function init(){
            
            $('#encrypt').click(function(event){
            
                event.preventDefault();
                
                $.serialize.andEncryptBeforeSubmit({
                    form            : "form",
                    fieldsToEncrypt : ['account','card'],
                    type            : "xhr-post",       //xhr-post, xhr-get, http-get, http-post
                    onEncrypt       : function(obj){    //callback if encrypted
                        $.serialize.andSubmit(obj);     //built-in xhr-submission function
                    },
                    noSubmit        : {   
                        "submitButton"  : false,
                        "dummy"         : false 
                    }
                });
            });

    }
});
			

Jquery wordt uitgebreid met de drie libraries, vervolgens worden de server keys opgehaald


Flow :

Na encryptie van de 'fieldsToEncrypt'wordt een customevent 'onEncrypt' getriggerd en er kan een callback-functie gedefinieerd worden met als argument een object :

obj = {
    type        : {string} xhr-post, xhr-get, http-get, http-post
    url         : {string} post or get url
    data        : {string} rsa encrypted string
    encrypted   : {string} encoded URI-component                           
    form        : {object} referentie naar formulier
};
            

Er kan gebruik worden gemaakt van de ingebouwde submit-functie, maar er kan ook een willekeurig andere callback gebruikt worden natuurlijk.



De encrypter die ik heb gebruikt is geschreven door Daniel Griesser, als onderdeel van jcryption, en maakt gebruik BigInt, een aantal functies om met grote integers te kunnen werken in javascript.

Ik heb de encrypter en de BigInt suite aangepast naar OOP, om vervuiling van de global namespace te voorkomen.

           
* jCryption JavaScript data encryption v1.1
* http://www.jcryption.org/
*
* Copyright (c) 2010 Daniel Griesser
* Dual licensed under the MIT and GPL licenses.
* http://www.opensource.org/licenses/mit-license.php

/*
* BigInt, a suite of routines for performing multiple-precision arithmetic in
* JavaScript.
* BarrettMu, a class for performing Barrett modular reduction computations in
* JavaScript.
*
*
* Copyright 1998-2005 David Shapiro.
* dave@ohdave.com
*
* changed and improved by Daniel Griesser
* http://www.jcryption.org/
* Daniel Griesser 
*
* changed and improved to OOP/namespacing by Aaldert van Weelden 2010
* http://www.aaldertvanweelden.nl/
* Aaldert van Weelden info@aaldertvanweelden.nl>
*/

Options :

oOptions = {
                form            : "",                   //form-id
                fieldsToEncrypt   : [],                 //vb : ['name', 'adres']
                type            : "xhr-post",           //xhr-post, xhr-get, http-get, http-post
                onEncrypt       : function(){},         //callback als encryptie is uitgevoerd
                submitSuccess : function(oResponse){},  //callback als form succesvol is verstuurd   
                submitFailure : function(oResponse){}   //callback als form niet is verstuurd 
                disableBtn      : true,                 //disable encrypt button after encryption
                posturl         : 'xhr/submit.php',     //if hash=false: xhr/submit_nohash.php
                geturl          : 'xhr/submit.php',
                decrypturl      : 'xhr/decrypt.php',
                keyurl          : 'xhr/key.php',
                btnEncrypt      : '#encrypt',
                encodeURI       : 'base64',             //base64,base64safe,false or '' = nodecode
                hash            : true,                 //encoding with hash check
                noSubmit        : {}                    //fieldnames not to be submitted
            },


Clientside code:

Deze file bevat twee classes : FormProcess is een custom eventhandler die het formulier submit naar de server via AJAX.
In de onload-class worden de events aan de submitbuttons gekoppeld, elk met hun eigen set aan options.





Clientside encrypt class:

Deze file bevat de RSA class die zorg draagt voor de encryptie. Ook bevat de class een native eventhandler die het formulier via AJAX naar de server upload.
Dit gebeurt default met vergelijking van een clientside en serverside hash, als tweede beveiliging.

Verder bevat deze file nog de BigInt suite en een Barret-class voor berekeningen met grote integers.



Serverside code

Op de server wordt een PHP-class gebruikt die afgeleid is van de PEAR Crypt_RSA package.