diff --git a/typo3/sysext/backend/Classes/Controller/EditDocumentController.php b/typo3/sysext/backend/Classes/Controller/EditDocumentController.php
index 31d50a9a4e2277138a3e30b5bd5d21359bb1229e..137cf9289554c57ddf96f9bbf37a52ab80f78ab7 100644
--- a/typo3/sysext/backend/Classes/Controller/EditDocumentController.php
+++ b/typo3/sysext/backend/Classes/Controller/EditDocumentController.php
@@ -690,7 +690,7 @@ class EditDocumentController {
 		$pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
 		$pageRenderer->addInlineLanguageLabelFile('EXT:lang/locallang_alt_doc.xlf');
 		$this->doc->setModuleTemplate('EXT:backend/Resources/Private/Templates/alt_doc.html');
-		$this->doc->form = '<form action="' . htmlspecialchars($this->R_URI) . '" method="post" enctype="multipart/form-data" name="editform" onsubmit="document.editform._scrollPosition.value=(document.documentElement.scrollTop || document.body.scrollTop); return TBE_EDITOR.checkSubmit(1);">';
+		$this->doc->form = '<form action="' . htmlspecialchars($this->R_URI) . '" method="post" enctype="multipart/form-data" name="editform" onsubmit="document.editform._scrollPosition.value=(document.documentElement.scrollTop || document.body.scrollTop); return TBE_EDITOR.checkAndDoSubmit(1);">';
 		// override the default jumpToUrl
 		$this->doc->JScodeArray['jumpToUrl'] = '
 			function jumpToUrl(URL,formEl) {
diff --git a/typo3/sysext/backend/Classes/Form/Element/InputElement.php b/typo3/sysext/backend/Classes/Form/Element/InputElement.php
index c5c7e1784c49d6a3f59ab3bf34dba2508d9f3894..ca06369735c9e1e305528cafe51388f022487179 100644
--- a/typo3/sysext/backend/Classes/Form/Element/InputElement.php
+++ b/typo3/sysext/backend/Classes/Form/Element/InputElement.php
@@ -174,9 +174,6 @@ class InputElement extends AbstractFormElement {
 		if (isset($config['max']) && (int)$config['max'] > 0) {
 			$attributes['maxlength'] = (int)$config['max'];
 		}
-		if (!empty($styles)) {
-			$attributes['style'] = implode(' ', $styles);
-		}
 		if (!empty($classes)) {
 			$attributes['class'] = implode(' ', $classes);
 		}
diff --git a/typo3/sysext/backend/Classes/Form/NodeFactory.php b/typo3/sysext/backend/Classes/Form/NodeFactory.php
index 71ee6475e2aaa6242402ec38c56434dfed4cff5d..8eb2a984a93c8de178dc99299e37bff9560b533d 100644
--- a/typo3/sysext/backend/Classes/Form/NodeFactory.php
+++ b/typo3/sysext/backend/Classes/Form/NodeFactory.php
@@ -49,6 +49,8 @@ class NodeFactory {
 		'check' => Element\CheckboxElement::class,
 		'group' => Element\GroupElement::class,
 		'input' => Element\InputElement::class,
+		// rsaInput is defined with a fallback so extensions can use it even if ext:rsaauth is not loaded
+		'rsaInput' => Element\InputElement::class,
 		'imageManipulation' => Element\ImageManipulationElement::class,
 		'none' => Element\NoneElement::class,
 		'radio' => Element\RadioElement::class,
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js
index b72d0251e34c75110fb99375c0bbd17966b6db68..9ab52a1f018cdb5665527211aaf2ea8d91337326 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine.js
@@ -636,6 +636,11 @@ define('TYPO3/CMS/Backend/FormEngine', ['jquery'], function ($) {
 			// change class and value
 			$parent.find('.t3js-charcounter span').removeClass().addClass(maxlengthProperties.labelClass).text(TBE_EDITOR.labels.remainingCharacters.replace('{0}', maxlengthProperties.remainingCharacters))
 		});
+		$(':password').on('focus', function() {
+			$(this).attr('type', 'text').select();
+		}).on('blur', function() {
+			$(this).attr('type', 'password');
+		});
 	};
 
 	/**
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js
index 1c6823e19d13447817e2063c2e69939e4f81fc5c..118023fe8cef2fe84069f07c17959c527f57c265 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngineValidation.js
@@ -130,7 +130,8 @@ define('TYPO3/CMS/Backend/FormEngineValidation', ['jquery', 'TYPO3/CMS/Backend/F
 				for (var i = 0; i < evalList.length; i++) {
 					value = FormEngineValidation.formatValue(evalList[i], value, config)
 				}
-				if (value.length) {
+				// Prevent password fields to be overwritten with original value
+				if (value.length && $humanReadableField.attr('type') != 'password') {
 					$humanReadableField.val(value);
 				}
 				if ($checkboxField.length) {
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.tbe_editor.js b/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.tbe_editor.js
index 0f098a4a4cd887ed8828f0d69c070bb408fdf3a7..08b885e9e7b379e24d10a5c82e1708752a0168e6 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.tbe_editor.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.tbe_editor.js
@@ -254,7 +254,9 @@ var TBE_EDITOR = {
 		// Set a short timeout to allow other JS processes to complete, in particular those from
 		// EXT:backend/Resources/Public/JavaScript/FormEngine.js (reference: http://forge.typo3.org/issues/58755).
 		// TODO: This should be solved in a better way when this script is refactored.
-		window.setTimeout('document[TBE_EDITOR.formname].submit()', 10);
+		window.setTimeout(function() {
+			document.getElementsByName(TBE_EDITOR.formname).submit();
+		}, 10);
 	},
 	split: function(theStr1, delim, index) {
 		var theStr = ""+theStr1;
diff --git a/typo3/sysext/core/Documentation/Changelog/7.4/Feature-67932-RsaauthApiRewrite.rst b/typo3/sysext/core/Documentation/Changelog/7.4/Feature-67932-RsaauthApiRewrite.rst
index 664366abb09f51ac9cb5bd7d2f752f662d51b99e..17ac8edbfe43f35b39ebb2dc55ce8d812df23cda 100644
--- a/typo3/sysext/core/Documentation/Changelog/7.4/Feature-67932-RsaauthApiRewrite.rst
+++ b/typo3/sysext/core/Documentation/Changelog/7.4/Feature-67932-RsaauthApiRewrite.rst
@@ -51,7 +51,8 @@ Decode
 ------
 
 To decode your data you can use the method ``TYPO3\CMS\Rsaauth\RsaEncryptionDecoder::decrypt`` which can
-either handle a string or an array as parameter.
+either handle a string or an array as parameter. Data that is handled by \TYPO3\CMS\Core\DataHandling\DataHandler will
+be decoded automatically before processing.
 
 Notice: A RSA public key can only be used once to decrypt data. If you encrypt multiple fields in your form
 you have to pass an array to the decrypt function with all data you want to decrypt. The function parses the
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-68166-RenderTypeForRsaEncryptedInputFields.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-68166-RenderTypeForRsaEncryptedInputFields.rst
new file mode 100644
index 0000000000000000000000000000000000000000..b2329897d8d9296a6c6ff910e0de9252b3914529
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/master/Feature-68166-RenderTypeForRsaEncryptedInputFields.rst
@@ -0,0 +1,23 @@
+===========================================================
+Feature: #67932 - RenderType for rsa encrypted input fields
+===========================================================
+
+Description
+===========
+
+The rsaauth extension defines an own render type for TCA input fields. Those fields will be encrypted before submitting the form.
+
+
+Impact
+======
+
+In the Backend password fields for backend and frontend users are automatically encoded before the form is submitted.
+
+Usage
+=====
+
+To encrypt your own TCA fields you can add define the render type ``rsaInput``.
+
+.. code-block:: php
+
+$GLOBALS['TCA']['be_users']['columns']['password']['config']['renderType'] = 'rsaInput';
diff --git a/typo3/sysext/rsaauth/Classes/Form/Element/RsaInputElement.php b/typo3/sysext/rsaauth/Classes/Form/Element/RsaInputElement.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd7b1995ed4d49f73926530a9c04d2da1c536cf7
--- /dev/null
+++ b/typo3/sysext/rsaauth/Classes/Form/Element/RsaInputElement.php
@@ -0,0 +1,178 @@
+<?php
+namespace TYPO3\CMS\Rsaauth\Form\Element;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Form\Element\AbstractFormElement;
+use TYPO3\CMS\Backend\Form\NodeFactory;
+use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Backend\Utility\IconUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Utility\MathUtility;
+
+/**
+ * Generation of form element of the type rsaInput
+ */
+class RsaInputElement extends AbstractFormElement {
+
+	/**
+	 * This will render a single-line input form field, possibly with various control/validation features
+	 *
+	 * @return array As defined in initializeResultArray() of AbstractNode
+	 */
+	public function render() {
+		$languageService = $this->getLanguageService();
+
+		$table = $this->globalOptions['table'];
+		$fieldName = $this->globalOptions['fieldName'];
+		$row = $this->globalOptions['databaseRow'];
+		$parameterArray = $this->globalOptions['parameterArray'];
+		$resultArray = $this->initializeResultArray();
+		$resultArray['requireJsModules'] = array('TYPO3/CMS/Rsaauth/RsaEncryptionModule');
+
+		$config = $parameterArray['fieldConf']['config'];
+		$specConf = BackendUtility::getSpecConfParts($parameterArray['fieldConf']['defaultExtras']);
+		$size = MathUtility::forceIntegerInRange($config['size'] ?: $this->defaultInputWidth, $this->minimumInputWidth, $this->maxInputWidth);
+		$evalList = GeneralUtility::trimExplode(',', $config['eval'], TRUE);
+		$classes = array();
+		$attributes = array(
+			'type' => 'text',
+			'data-rsa-encryption' => $parameterArray['itemFormElID'] . '_hidden',
+			'value' => '',
+		);
+
+		// readonly
+		if ($this->isGlobalReadonly() || $config['readOnly']) {
+			$itemFormElValue = $parameterArray['itemFormElValue'];
+			$options = $this->globalOptions;
+			$options['parameterArray'] = array(
+				'fieldConf' => array(
+					'config' => $config,
+				),
+				'itemFormElValue' => $itemFormElValue,
+			);
+			$options['renderType'] = 'none';
+			/** @var NodeFactory $nodeFactory */
+			$nodeFactory = $this->globalOptions['nodeFactory'];
+			return $nodeFactory->create($options)->render();
+		}
+
+		// @todo: The whole eval handling is a mess and needs refactoring
+		foreach ($evalList as $func) {
+			switch ($func) {
+				case 'required':
+					$attributes['data-formengine-validation-rules'] = $this->getValidationDataAsJsonString(array('required' => TRUE));
+					break;
+				case 'password':
+					$attributes['type'] = 'password';
+					$attributes['value'] = '********';
+					break;
+				default:
+					// @todo: This is ugly: The code should find out on it's own whether a eval definition is a
+					// @todo: keyword like "date", or a class reference. The global registration could be dropped then
+					// Pair hook to the one in \TYPO3\CMS\Core\DataHandling\DataHandler::checkValue_input_Eval()
+					if (isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals'][$func])) {
+						if (class_exists($func)) {
+							$evalObj = GeneralUtility::makeInstance($func);
+							if (method_exists($evalObj, 'deevaluateFieldValue')) {
+								$_params = array(
+									'value' => $parameterArray['itemFormElValue']
+								);
+								$parameterArray['itemFormElValue'] = $evalObj->deevaluateFieldValue($_params);
+							}
+						}
+					}
+			}
+		}
+		$evalList = array_filter($evalList, function($value) {
+			return $value !== 'password';
+		});
+
+		$paramsList = array(
+			'field' => $parameterArray['itemFormElName'],
+			'evalList' => implode(',', $evalList),
+			'is_in' => trim($config['is_in']),
+		);
+		// set classes
+		$classes[] = 'form-control';
+		$classes[] = 't3js-clearable';
+		$classes[] = 'hasDefaultValue';
+
+		// calculate attributes
+		$attributes['data-formengine-validation-rules'] = $this->getValidationDataAsJsonString($config);
+		$attributes['data-formengine-input-params'] = json_encode($paramsList);
+		$attributes['id'] = str_replace('.', '', uniqid('formengine-input-', TRUE));
+		$attributes['name'] = $parameterArray['itemFormElName'] . '_hr';
+		if (isset($config['max']) && (int)$config['max'] > 0) {
+			$attributes['maxlength'] = (int)$config['max'];
+		}
+		if (!empty($classes)) {
+			$attributes['class'] = implode(' ', $classes);
+		}
+		if (isset($config['max']) && (int)$config['max'] > 0) {
+			$attributes['maxlength'] = (int)$config['max'];
+		}
+
+		// This is the EDITABLE form field.
+		$placeholderValue = $this->getPlaceholderValue($table, $config, $row);
+		if (!empty($placeholderValue)) {
+			$attributes['placeholder'] = trim($languageService->sL($placeholderValue));
+		}
+
+		// Build the attribute string
+		$attributeString = '';
+		foreach ($attributes as $attributeName => $attributeValue) {
+			$attributeString .= ' ' . $attributeName . '="' . htmlspecialchars($attributeValue) . '"';
+		}
+
+		$html = '
+			<input'
+			. $attributeString
+			. $parameterArray['onFocus'] . ' />';
+
+		// This is the ACTUAL form field - values from the EDITABLE field must be transferred to this field which is the one that is written to the database.
+		$html .= '<input type="hidden" id="' . $parameterArray['itemFormElID'] . '_hidden" name="' . $parameterArray['itemFormElName'] . '" value="' . htmlspecialchars($parameterArray['itemFormElValue']) . '" />';
+
+		// Going through all custom evaluations configured for this field
+		// @todo: Similar to above code!
+		foreach ($evalList as $evalData) {
+			if (isset($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tce']['formevals'][$evalData])) {
+				if (class_exists($evalData)) {
+					$evalObj = GeneralUtility::makeInstance($evalData);
+					if (method_exists($evalObj, 'returnFieldJS')) {
+						$resultArray['extJSCODE'] .= LF . 'TBE_EDITOR.customEvalFunctions[' . GeneralUtility::quoteJSvalue($evalData) . '] = function(value) {' . $evalObj->returnFieldJS() . '}';
+					}
+				}
+			}
+		}
+
+		// Wrap a wizard around the item?
+		$html = $this->renderWizards(
+			array($html),
+			$config['wizards'],
+			$table,
+			$row,
+			$fieldName,
+			$parameterArray,
+			$parameterArray['itemFormElName'] . '_hr', $specConf
+		);
+
+		// Add a wrapper to remain maximum width
+		$width = (int)$this->formMaxWidth($size);
+		$html = '<div class="form-control-wrap"' . ($width ? ' style="max-width: ' . $width . 'px"' : '') . '>' . $html . '</div>';
+		$resultArray['html'] = $html;
+		return $resultArray;
+	}
+
+}
diff --git a/typo3/sysext/rsaauth/Classes/Hook/DecryptionHook.php b/typo3/sysext/rsaauth/Classes/Hook/DecryptionHook.php
new file mode 100644
index 0000000000000000000000000000000000000000..357053289a904cbd0e27e0bcd3bb36b54f18a007
--- /dev/null
+++ b/typo3/sysext/rsaauth/Classes/Hook/DecryptionHook.php
@@ -0,0 +1,42 @@
+<?php
+namespace TYPO3\CMS\Rsaauth\Hook;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\DataHandling\DataHandler;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Rsaauth\RsaEncryptionDecoder;
+
+/**
+ * Class that hooks into DataHandler and decrypts rsa encrypted data
+ */
+class DecryptionHook {
+
+	/**
+	 * @param array $incomingFieldArray
+	 * @param string $table
+	 * @param int $id
+	 * @param DataHandler $parentObject
+	 */
+	public function processDatamap_preProcessFieldArray(&$incomingFieldArray, $table, $id, $parentObject) {
+		$serializedString = serialize($incomingFieldArray);
+		if (strpos($serializedString, 'rsa:') === FALSE) {
+			return;
+		}
+
+		$rsaEncryptionDecoder = GeneralUtility::makeInstance(RsaEncryptionDecoder::class);
+		$incomingFieldArray = $rsaEncryptionDecoder->decrypt($incomingFieldArray);
+	}
+
+}
diff --git a/typo3/sysext/rsaauth/Classes/RsaEncryptionDecoder.php b/typo3/sysext/rsaauth/Classes/RsaEncryptionDecoder.php
index 0ad0cf96c2c72caf5998743c58908b0fbdb07a9e..7f723bcf6e1e9d8d7e765631ac91aeb028a757fb 100644
--- a/typo3/sysext/rsaauth/Classes/RsaEncryptionDecoder.php
+++ b/typo3/sysext/rsaauth/Classes/RsaEncryptionDecoder.php
@@ -14,6 +14,8 @@ namespace TYPO3\CMS\Rsaauth;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\StringUtility;
+
 /**
  * This class decodes rsa protected data
  */
@@ -44,17 +46,7 @@ class RsaEncryptionDecoder implements \TYPO3\CMS\Core\SingletonInterface {
 		}
 
 		$decryptedData = is_array($data) ? $data : array($data);
-
-		foreach ($decryptedData as $key => $value) {
-			if (substr($value, 0, 4) !== 'rsa:') {
-				continue;
-			}
-
-			$decryptedValue = $this->getBackend()->decrypt($this->getKey(), substr($value, 4));
-			if ($decryptedValue !== NULL) {
-				$decryptedData[$key] = $decryptedValue;
-			}
-		}
+		$decryptedData = $this->decryptDataArray($decryptedData);
 		$this->getStorage()->put(NULL);
 
 		return is_array($data) ? $decryptedData : $decryptedData[0];
@@ -67,6 +59,33 @@ class RsaEncryptionDecoder implements \TYPO3\CMS\Core\SingletonInterface {
 		return $this->getBackend() instanceof Backend\AbstractBackend;
 	}
 
+	/**
+	 * @param array $data
+	 * @return array
+	 */
+	protected function decryptDataArray(array $data) {
+		foreach ($data as $key => $value) {
+			if (empty($value)) {
+				continue;
+			}
+			if (is_array($value)) {
+				$data[$key] = $this->decryptDataArray($value);
+				continue;
+			}
+
+			if (!StringUtility::beginsWith($value, 'rsa:')) {
+				continue;
+			}
+
+			$decryptedValue = $this->getBackend()->decrypt($this->getKey(), substr($value, 4));
+			if ($decryptedValue !== NULL) {
+				$data[$key] = $decryptedValue;
+			}
+		}
+
+		return $data;
+	}
+
 	/**
 	 * @return string
 	 */
diff --git a/typo3/sysext/rsaauth/Configuration/TCA/Overrides/be_users.php b/typo3/sysext/rsaauth/Configuration/TCA/Overrides/be_users.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7d01211d747b610973d0c749b6577fece79980e
--- /dev/null
+++ b/typo3/sysext/rsaauth/Configuration/TCA/Overrides/be_users.php
@@ -0,0 +1,4 @@
+<?php
+defined('TYPO3_MODE') or die();
+
+$GLOBALS['TCA']['be_users']['columns']['password']['config']['renderType'] = 'rsaInput';
diff --git a/typo3/sysext/rsaauth/Configuration/TCA/Overrides/fe_users.php b/typo3/sysext/rsaauth/Configuration/TCA/Overrides/fe_users.php
new file mode 100644
index 0000000000000000000000000000000000000000..b19fc8498e150b1b1728db4a1692654c051e4e35
--- /dev/null
+++ b/typo3/sysext/rsaauth/Configuration/TCA/Overrides/fe_users.php
@@ -0,0 +1,4 @@
+<?php
+defined('TYPO3_MODE') or die();
+
+$GLOBALS['TCA']['fe_users']['columns']['password']['config']['renderType'] = 'rsaInput';
diff --git a/typo3/sysext/rsaauth/Resources/Public/JavaScript/RsaEncryptionModule.js b/typo3/sysext/rsaauth/Resources/Public/JavaScript/RsaEncryptionModule.js
index c16e732a837bf64829666c4333f61136db2e6e00..37b4650f6419df15953523c1b33b89a89fdc883f 100644
--- a/typo3/sysext/rsaauth/Resources/Public/JavaScript/RsaEncryptionModule.js
+++ b/typo3/sysext/rsaauth/Resources/Public/JavaScript/RsaEncryptionModule.js
@@ -86,24 +86,30 @@ define('TYPO3/CMS/Rsaauth/RsaEncryptionModule', ['jquery', './RsaLibrary'], func
 			rsa.setPublic(publicKey[0], publicKey[1]);
 			RsaEncryption.$currentForm.find(':input[data-rsa-encryption]').each(function() {
 				var $this = $(this);
-				var encryptedPassword = rsa.encrypt($this.val());
+				var encryptedValue = rsa.encrypt($this.val());
 				var dataAttribute = $this.data('rsa-encryption');
+				var rsaValue = 'rsa:' + hex2b64(encryptedValue);
 
 				if (!dataAttribute) {
-					$this.val('rsa:' + hex2b64(encryptedPassword));
+					$this.val(rsaValue);
 				} else {
 					var $typo3Field = $('#' + dataAttribute);
-					$typo3Field.val('rsa:' + hex2b64(encryptedPassword));
+					$typo3Field.val(rsaValue);
 					// Reset user password field to prevent it from being submitted
 					$this.val('');
 				}
 			});
 
-			// Create a hidden input field to fake pressing the submit button
-			RsaEncryption.$currentForm.append('<input type="hidden" name="commandLI" value="Submit">');
-
-			// Submit the form
-			RsaEncryption.$currentForm.trigger('submit');
+			// Try to fetch the field which submitted the form
+			var $currentField = RsaEncryption.$currentForm.find('input[type=submit]:focus,input[type=image]:focus');
+			if ($currentField.length === 1) {
+				$currentField.trigger('click');
+			} else {
+				// Create a hidden input field to fake pressing the submit button
+				RsaEncryption.$currentForm.append('<input type="hidden" name="commandLI" value="Submit">');
+				// Submit the form
+				RsaEncryption.$currentForm.trigger('submit');
+			}
 		}
 	};
 
diff --git a/typo3/sysext/rsaauth/ext_localconf.php b/typo3/sysext/rsaauth/ext_localconf.php
index e1f09aea431cf7f273bb469d1f86205f2e4830ac..5539676f22016fd6080ff8550a0d845b738d50c7 100644
--- a/typo3/sysext/rsaauth/ext_localconf.php
+++ b/typo3/sysext/rsaauth/ext_localconf.php
@@ -46,3 +46,13 @@ $GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['RsaPublicKeyGenerationControll
 	\TYPO3\CMS\Rsaauth\Slot\UsernamePasswordProviderSlot::class,
 	'getPageRenderer'
 );
+
+// Register automatic decryption in DataHandler
+$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['rsaauth'] = \TYPO3\CMS\Rsaauth\Hook\DecryptionHook::class;
+
+// Add own form element
+$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][1436965601] = array(
+	'nodeName' => 'rsaInput',
+	'priority' => '70',
+	'class' => \TYPO3\CMS\Rsaauth\Form\Element\RsaInputElement::class,
+);