<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.7.1 at 2016-09-23 
 | Rendered using Apache Maven Fluido Skin 1.5
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="Apache OpenMeetings Team" />
    <meta name="Date-Revision-yyyymmdd" content="20160923" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache OpenMeetings Project &#x2013; Howto create a Custom Crypt styles</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.5.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />

      
    <script type="text/javascript" src="./js/apache-maven-fluido-1.5.min.js"></script>

          <script type="text/javascript" src="http://openmeetings.apache.org/js/site.js"></script>
                      </head>
        <body class="topBarDisabled">
          
                
                    
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                                  <a href="index.html" id="bannerLeft">
                                                                                                <img src="images/logo.png"  alt="Apache OpenMeetings"/>
                </a>
                      </div>
        <div class="pull-right">                  <a href="http://apache.org" id="bannerRight">
                                                                                        <img src="http://apache.org/img/asf_logo.png"  alt="Apache"/>
                </a>
      </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
              
                  <li id="publishDate">Last Published: 2016-09-23
                   </li>
                      
              
      
                                    
    <li class="pull-right">
        <span class="divider">|</span>
                      <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" class="externalLink" title="Wiki">
        Wiki</a>
      </li>

  
    <li class="pull-right">
        <span class="divider">|</span>
                      <a href="installation.html" title="Installation">
        Installation</a>
      </li>

  
    <li class="pull-right">
        <span class="divider">|</span>
                      <a href="downloads.html" title="Download">
        Download</a>
      </li>

  
    <li class="pull-right">
                      <a href="demo.html" title="Demo">
        Demo</a>
      </li>

                    </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
              
                <ul class="nav nav-list">
                                                                                                                                                                                                                      
      <li>
  
                          <a href="#general" title="General">
          <span class="icon-chevron-down"></span>
        General</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="index.html" title="Home">
          <span class="none"></span>
        Home</a>
            </li>
                    
      <li>
  
                          <a href="demo.html" title="Demo">
          <span class="none"></span>
        Demo</a>
            </li>
                    
      <li>
  
                          <a href="license.html" title="License">
          <span class="none"></span>
        License</a>
            </li>
                    
      <li>
  
                          <a href="http://www.apache.org/" class="externalLink" title="ASF">
          <span class="none"></span>
        ASF</a>
            </li>
                    
      <li>
  
                          <a href="downloads.html" title="Downloads">
          <span class="none"></span>
        Downloads</a>
            </li>
                    
      <li>
  
                          <a href="CallForLogo.html" title="Call For Logo">
          <span class="none"></span>
        Call For Logo</a>
            </li>
                    
      <li>
  
                          <a href="NewsArchive.html" title="News archive">
          <span class="none"></span>
        News archive</a>
            </li>
                    
      <li>
  
                          <a href="security.html" title="Security">
          <span class="none"></span>
        Security</a>
            </li>
                    
      <li>
  
                          <a href="commercial-support.html" title="Commercial Support">
          <span class="none"></span>
        Commercial Support</a>
            </li>
              </ul>
        </li>
                                                                                                                  
      <li>
  
                          <a href="#installation" title="Installation and Upgrade">
          <span class="icon-chevron-down"></span>
        Installation and Upgrade</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="installation.html" title="Installation">
          <span class="none"></span>
        Installation</a>
            </li>
                    
      <li>
  
                          <a href="Upgrade.html" title="Upgrade">
          <span class="none"></span>
        Upgrade</a>
            </li>
                    
      <li>
  
                          <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" class="externalLink" title="Tutorials">
          <span class="none"></span>
        Tutorials</a>
            </li>
                    
      <li>
  
                          <a href="CommandLineAdmin.html" title="Command Line Admin">
          <span class="none"></span>
        Command Line Admin</a>
            </li>
              </ul>
        </li>
                                                                                                                  
      <li>
  
                          <a href="#community" title="Community">
          <span class="icon-chevron-down"></span>
        Community</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="get-involved.html" title="Get Involved">
          <span class="none"></span>
        Get Involved</a>
            </li>
                    
      <li>
  
                          <a href="team-list.html" title="Committers">
          <span class="none"></span>
        Committers</a>
            </li>
                    
      <li>
  
                          <a href="mail-lists.html" title="Mailing Lists">
          <span class="none"></span>
        Mailing Lists</a>
            </li>
                    
      <li>
  
                          <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/" class="externalLink" title="Wiki">
          <span class="none"></span>
        Wiki</a>
            </li>
              </ul>
        </li>
                                                                                                                                                                                                                              
      <li>
  
                          <a href="#dev" title="Development">
          <span class="icon-chevron-down"></span>
        Development</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="source-repository.html" title="Source Code">
          <span class="none"></span>
        Source Code</a>
            </li>
                    
      <li>
  
                          <a href="issue-tracking.html" title="Bugs / Issues">
          <span class="none"></span>
        Bugs / Issues</a>
            </li>
                    
      <li>
  
                          <a href="dependencies.html" title="Dependencies">
          <span class="none"></span>
        Dependencies</a>
            </li>
                    
      <li>
  
                          <a href="integration.html" title="Continuous Integration">
          <span class="none"></span>
        Continuous Integration</a>
            </li>
                    
      <li>
  
                          <a href="BuildInstructions_3.0.x.html" title="Build Instructions 3.0.x">
          <span class="none"></span>
        Build Instructions 3.0.x</a>
            </li>
                    
      <li>
  
                          <a href="BuildInstructions.html" title="Build Instructions">
          <span class="none"></span>
        Build Instructions</a>
            </li>
                    
      <li>
  
                          <a href="JUnitTesting.html" title="JUnit Testing">
          <span class="none"></span>
        JUnit Testing</a>
            </li>
                    
      <li>
  
                          <a href="ManualTesting.html" title="Manual Testing">
          <span class="none"></span>
        Manual Testing</a>
            </li>
                    
      <li>
  
                          <a href="ReleaseGuide.html" title="Release Guide">
          <span class="none"></span>
        Release Guide</a>
            </li>
                    
      <li>
  
                          <a href="WebsiteGuide.html" title="Website Guide">
          <span class="none"></span>
        Website Guide</a>
            </li>
              </ul>
        </li>
                                                                                                                                                      
      <li>
  
                          <a href="#integration" title="Integration">
          <span class="icon-chevron-down"></span>
        Integration</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="openmeetings-webservice/apidocs/index.html" target="_blank" title="SOAP/REST API">
          <span class="none"></span>
        SOAP/REST API</a>
            </li>
                    
      <li>
  
                          <a href="RestAPISample.html" title="REST API Sample">
          <span class="none"></span>
        REST API Sample</a>
            </li>
                    
      <li>
  
                          <a href="LdapAndADS.html" title="Ldap and ADS">
          <span class="none"></span>
        Ldap and ADS</a>
            </li>
                    
      <li>
  
                          <a href="oauth2.html" title="OAuth2">
          <span class="none"></span>
        OAuth2</a>
            </li>
                    
      <li>
  
                          <a href="voip-sip-integration.html" title="VoIP and SIP">
          <span class="none"></span>
        VoIP and SIP</a>
            </li>
                    
      <li>
  
                          <a href="errorvalues.html" title="Errors table">
          <span class="none"></span>
        Errors table</a>
            </li>
              </ul>
        </li>
                                                                                                                                                                                                            
      <li>
  
                          <a href="#plugins" title="Plugins">
          <span class="icon-chevron-down"></span>
        Plugins</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="MoodlePlugin.html" title="Moodle Plugin">
          <span class="none"></span>
        Moodle Plugin</a>
            </li>
                    
      <li>
  
                          <a href="SakaiPlugin.html" title="Sakai Plugin">
          <span class="none"></span>
        Sakai Plugin</a>
            </li>
                    
      <li>
  
                          <a href="JiraPlugin.html" title="Jira Plugin">
          <span class="none"></span>
        Jira Plugin</a>
            </li>
                    
      <li>
  
                          <a href="JoomlaPlugin.html" title="Joomla Plugin">
          <span class="none"></span>
        Joomla Plugin</a>
            </li>
                    
      <li>
  
                          <a href="DrupalPlugin.html" title="Drupal Plugin">
          <span class="none"></span>
        Drupal Plugin</a>
            </li>
                    
      <li>
  
                          <a href="BitrixPlugin.html" title="Bitrix Plugin">
          <span class="none"></span>
        Bitrix Plugin</a>
            </li>
                    
      <li>
  
                          <a href="ConfluencePlugin.html" title="Confluence Plugin">
          <span class="none"></span>
        Confluence Plugin</a>
            </li>
                    
      <li>
  
                          <a href="SugarCRMPlugin.html" title="SugarCRM Plugin">
          <span class="none"></span>
        SugarCRM Plugin</a>
            </li>
                    
      <li>
  
                          <a href="RedminePlugin.html" title="Redmine Plugin">
          <span class="none"></span>
        Redmine Plugin</a>
            </li>
              </ul>
        </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
      <li>
  
                          <a href="#config" title="Configuration">
          <span class="icon-chevron-down"></span>
        Configuration</a>
                    <ul class="nav nav-list">
                                                                                                                                                          
      <li>
  
                          <a href="#db" title="DB Sample Configurations">
          <span class="icon-chevron-down"></span>
        DB Sample Configurations</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="ApacheDerbyConfig.html" title="Apache Derby">
          <span class="none"></span>
        Apache Derby</a>
            </li>
                    
      <li>
  
                          <a href="IBMDB2Config.html" title="IBM DB2">
          <span class="none"></span>
        IBM DB2</a>
            </li>
                    
      <li>
  
                          <a href="OracleConfig.html" title="Oracle">
          <span class="none"></span>
        Oracle</a>
            </li>
                    
      <li>
  
                          <a href="MySQLConfig.html" title="MySQL">
          <span class="none"></span>
        MySQL</a>
            </li>
                    
      <li>
  
                          <a href="PostgresConfig.html" title="Postgres">
          <span class="none"></span>
        Postgres</a>
            </li>
                    
      <li>
  
                          <a href="MSSQLConfig.html" title="MSSQL">
          <span class="none"></span>
        MSSQL</a>
            </li>
              </ul>
        </li>
                                                                                                                      
      <li>
  
                          <a href="#localization" title="Localization and languages">
          <span class="icon-chevron-down"></span>
        Localization and languages</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="Internationalisation.html" title="Internationalisation">
          <span class="none"></span>
        Internationalisation</a>
            </li>
                    
      <li>
  
                          <a href="LanguageEditor.html" title="LanguageEditor">
          <span class="none"></span>
        LanguageEditor</a>
            </li>
                    
      <li>
  
                          <a href="TimeZoneHandling.html" title="TimeZoneHandling">
          <span class="none"></span>
        TimeZoneHandling</a>
            </li>
                    
      <li>
  
                          <a href="EditTemplates.html" title="EditTemplates">
          <span class="none"></span>
        EditTemplates</a>
            </li>
              </ul>
        </li>
                                                                
      <li>
  
                          <a href="#port" title="NAT Port Settings">
          <span class="icon-chevron-down"></span>
        NAT Port Settings</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="PortSettings.html" title="Port settings">
          <span class="none"></span>
        Port settings</a>
            </li>
              </ul>
        </li>
                                                                                  
      <li>
  
                          <a href="#performance" title="Performance">
          <span class="icon-chevron-down"></span>
        Performance</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="JVMPerformanceTuning.html" title="JVM performance tuning">
          <span class="none"></span>
        JVM performance tuning</a>
            </li>
                    
      <li>
  
                          <a href="NetworkCalculator.html" title="Network bandwidth calculator">
          <span class="none"></span>
        Network bandwidth calculator</a>
            </li>
              </ul>
        </li>
                                                                                                                                        
      <li>
  
                          <a href="#interface" title="User Interface">
          <span class="icon-chevron-down"></span>
        User Interface</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="themes-and-branding.html" title="Themes">
          <span class="none"></span>
        Themes</a>
            </li>
                    
      <li>
  
                          <a href="Dashboard.html" title="Dashboard">
          <span class="none"></span>
        Dashboard</a>
            </li>
                    
      <li>
  
                          <a href="WebcamResolutions.html" title="Webcam resolutions">
          <span class="none"></span>
        Webcam resolutions</a>
            </li>
                    
      <li>
  
                          <a href="ConferenceRoomLayoutOptions.html" title="Room layout options">
          <span class="none"></span>
        Room layout options</a>
            </li>
                    
      <li>
  
                          <a href="HotKeys.html" title="Hot Keys">
          <span class="none"></span>
        Hot Keys</a>
            </li>
              </ul>
        </li>
                                                                                                                                                                    
      <li>
  
                          <a href="#customize" title="Customization">
          <span class="icon-chevron-down"></span>
        Customization</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="WebappNamePath.html" title="Webapp name/path">
          <span class="none"></span>
        Webapp name/path</a>
            </li>
                    
      <li>
  
                          <a href="Navigation.html" title="Navigation">
          <span class="none"></span>
        Navigation</a>
            </li>
                    
      <li>
  
                          <a href="CalendarAndTimezone.html" title="Calendar and timezone">
          <span class="none"></span>
        Calendar and timezone</a>
            </li>
                    
      <li>
  
                          <a href="CustomRoomTypeHowTo.html" title="Custom room type">
          <span class="none"></span>
        Custom room type</a>
            </li>
                    
      <li class="active">
  
            <a href="#"><span class="none"></span>Custom crypt mechanism</a>
          </li>
                    
      <li>
  
                          <a href="GeneralConfiguration.html" title="General Configuration">
          <span class="none"></span>
        General Configuration</a>
            </li>
              </ul>
        </li>
                                                                                  
      <li>
  
                          <a href="#security" title="Security">
          <span class="icon-chevron-down"></span>
        Security</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="RestrictedAccess.html" title="Restricted Access">
          <span class="none"></span>
        Restricted Access</a>
            </li>
                    
      <li>
  
                          <a href="RTMPSAndHTTPS.html" title="RTMPS and HTTPS">
          <span class="none"></span>
        RTMPS and HTTPS</a>
            </li>
              </ul>
        </li>
                                                                                  
      <li>
  
                          <a href="#convert" title="Converters">
          <span class="icon-chevron-down"></span>
        Converters</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="OpenOfficeConverter.html" title="OpenOffice Converter">
          <span class="none"></span>
        OpenOffice Converter</a>
            </li>
                    
      <li>
  
                          <a href="FFMPEGVersionSwitch.html" title="FFMPEG Version Switch">
          <span class="none"></span>
        FFMPEG Version Switch</a>
            </li>
              </ul>
        </li>
                                                                
      <li>
  
                          <a href="#cluster" title="Clustering">
          <span class="icon-chevron-down"></span>
        Clustering</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="Clustering.html" title="Clustering">
          <span class="none"></span>
        Clustering</a>
            </li>
              </ul>
        </li>
                                                                
      <li>
  
                          <a href="#misc" title="Misc">
          <span class="icon-chevron-down"></span>
        Misc</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="GetVersionInfo.html" title="Get version info">
          <span class="none"></span>
        Get version info</a>
            </li>
              </ul>
        </li>
              </ul>
        </li>
                      </ul>
              
                
          <hr />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
      </a>
                  </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span10" >
                                  
            
	
		<div class="section">
<h2><a name="Configuration_of_Custom_Crypt-Style"></a>Configuration of Custom Crypt-Style</h2>
			
<p>
				You can use custom Crypt-Types, but you should decide during
				installation which Type of encryption you want to use. By default
				two type are available:
			</p>

			
<ul>
				
<li>org.apache.openmeetings.util.crypt.MD5Implementation - this uses common MD5
					Crypt like PHP does, this is the default one (results in something
					like: fe01ce2a7fbac8fafaed7c982a04e229)</li>
				
<li>org.apache.openmeetings.util.crypt.MD5CryptImplementation - does use
					BSD-Style of encryption using a salt (results in something like:
					$1$GMsj7F2I$5S3r9CeukXGXNwf6b4sph1)</li>
			</ul>
			
<p>
				You can edit the config-key during Installation or later in the
				Administration Panel. But if you change it using the
				Administration-Panel previous passwords might be not working anymore
				as they are encrypted with another algorithm.
			</p>
		</div>
		
<div class="section">
<h2><a name="Configuration_of_Custom_Crypt-Style"></a>Configuration of Custom Crypt-Style</h2>
			
<p>
				To add your own crypt style you need to write a class which
				implements the interface: org.apache.openmeetings.util.crypt.ICrypt
				<br />
				Example of an Implementation:
			</p>
			
<div class="source"><pre class="prettyprint">

package org.apache.openmeetings.util.crypt;

import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

import java.security.NoSuchAlgorithmException;

import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;

public class MD5Implementation implements ICrypt {
	private static final Logger log = Red5LoggerFactory.getLogger(MD5Implementation.class, webAppRootKey);

	/*
	 * (non-Javadoc)
	 * @see org.apache.openmeetings.utils.crypt.ICrypt#hash(java.lang.String)
	 */
	@Override
	public String hash(String str) {
		String passPhrase = null;
		try {
			passPhrase = MD5.checksum(str);
		} catch (NoSuchAlgorithmException e) {
			log.error(&quot;Error&quot;, e);
		}
		return passPhrase;
	}

	/*
	 * (non-Javadoc)
	 * @see org.apache.openmeetings.utils.crypt.ICrypt#verify(java.lang.String, java.lang.String)
	 */
	@Override
	public boolean verify(String str, String hash) {
		return hash != null &amp;&amp; hash.equals(hash(str));
	}
}

			</pre></div>
			
<p>To add your own Encryption-Class you need to add your class to the
				OpenMeetings-Webapp (make it available to the webapp-classpath) and
				use your custom-class-name instead of
				org.apache.openmeetings.util.crypt.MD5Implementation during the Installation or
				at runtime by editing the config-key crypt_ClassName</p>
		</div>
		
<div class="section">
<h2><a name="Configuration_of_Custom_Crypt-Style"></a>Configuration of Custom Crypt-Style</h2>
			
<p>credits goto Mika for sharing his Implementation of the
				MD5Crypt-Style</p>
		</div>
	

                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
                      <div class="row-fluid">
                                      <p >Copyright &copy;                    2012&#x2013;2016
                        <a href="http://apache.org">Apache Software Foundation</a>.
            All rights reserved.    
      </p>
                </div>

        
                </div>
    </footer>
        </body>
</html>
