<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://cs.crisfervil.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>crisfervil.com</title><link>http://cs.crisfervil.com/blogs/</link><description>&lt;B&gt;Cris&lt;/B&gt;thian &lt;B&gt;Fern&lt;/B&gt;ández &lt;B&gt;Vil&lt;/B&gt;lalba</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>CERN CMS Fireworks</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/11/24/cern-cms-fireworks.aspx</link><pubDate>Tue, 24 Nov 2009 22:47:00 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9491</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;He visto unas capturas de pantalla de la aplicaci&amp;oacute;n que usan para analizar los datos que genera el &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Gran_colisionador_de_hadrones"&gt;Colisionador de Hadrones&lt;/a&gt; del &lt;a target="_blank" href="http://public.web.cern.ch/public/en/LHC/LHC-en.html"&gt;CERN&lt;/a&gt; y me ha llamado la atenci&amp;oacute;n lo espectacular de la interface&amp;hellip; as&amp;iacute; que he investigado un poco&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/R121995L6E181_5F00_54A1979A.png"&gt;&lt;img height="484" width="634" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/R121995L6E181_5F00_thumb_5F00_413C8162.png" alt="R121995-L6-E18[1]" border="0" title="R121995-L6-E18[1]" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Parece una aplicaci&amp;oacute;n en Java, o C++ , sobre Linux&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/HaloHCAL1136861_5F00_34DA7007.jpg"&gt;&lt;img height="389" width="645" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/HaloHCAL1136861_5F00_thumb_5F00_672E1DB9.jpg" alt="Halo-HCAL-113686[1]" border="0" title="Halo-HCAL-113686[1]" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;No est&amp;aacute; mal eh!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/CollisionEvent1_5F00_1FC8A1FA.png"&gt;&lt;img height="493" width="645" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/CollisionEvent1_5F00_thumb_5F00_5A6FFF36.png" alt="CollisionEvent[1]" border="0" title="CollisionEvent[1]" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Aunque pone FireWorks, creo que no tiene nada que ver con el &lt;span style="text-decoration:line-through;"&gt;Macromedia&lt;/span&gt; &lt;a target="_blank" href="http://www.adobe.com/products/fireworks/"&gt;Adobe Fireworks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tutorial de la aplicaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twiki.cern.ch/twiki/bin/view/CMS/WorkBookFireworksTutorial" title="https://twiki.cern.ch/twiki/bin/view/CMS/WorkBookFireworksTutorial"&gt;https://twiki.cern.ch/twiki/bin/view/CMS/WorkBookFireworksTutorial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;V&amp;iacute;deo de demostraci&amp;oacute;n de la aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cms-service-sdtweb.web.cern.ch/cms-service-sdtweb/fireworks/demo.mov" title="http://cms-service-sdtweb.web.cern.ch/cms-service-sdtweb/fireworks/demo.mov"&gt;http://cms-service-sdtweb.web.cern.ch/cms-service-sdtweb/fireworks/demo.mov&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En el video parece que responde bastante bien. &lt;/p&gt;
&lt;p&gt;La habr&amp;aacute;n hecho en la India? en China? cu&amp;aacute;ndo han podido tardar en hacer algo as&amp;iacute;? cu&amp;aacute;nto debi&amp;oacute; costar? &lt;/p&gt;
&lt;p&gt;El LHC comenz&amp;oacute; a construirse sobre el antiguo t&amp;uacute;nel del &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Large_Electron%E2%80%93Positron_Collider"&gt;LEP&lt;/a&gt;, en el a&amp;ntilde;o 2000, y al parecer tendr&amp;aacute; un coste total de 3,7 Billones (con B) de Euros!!&amp;nbsp; Desde luego no podr&amp;aacute;n decir que no han tenido tiempo y presupuesto..&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cms.web.cern.ch/cms/News/e-commentary/cms-e-commentary09.htm" title="http://cms.web.cern.ch/cms/News/e-commentary/cms-e-commentary09.htm"&gt;http://cms.web.cern.ch/cms/News/e-commentary/cms-e-commentary09.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9491" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/General/default.aspx">General</category></item><item><title>DataTable to Excel con un control DataGrid</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-un-control-datagrid.aspx</link><pubDate>Mon, 23 Nov 2009 17:07:00 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9489</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Dejo c&amp;oacute;digo con otra opci&amp;oacute;n para exportar datos de un &lt;a href="http://msdn.microsoft.com/es-es/library/system.data.datatable.aspx" target="_blank"&gt;DataTable&lt;/a&gt; a un archivo Excel.&lt;/p&gt;
&lt;p&gt;Resulta que el Excel es capaz de reconocer c&amp;oacute;digo html de una tabla, y eso es precisamente lo que genera el control &lt;a href="http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.datagrid.aspx" target="_blank"&gt;DataGrid&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Este m&amp;eacute;todo no me gusta demasiado porque implica referenciar el espacio de nombres &lt;a href="http://msdn.microsoft.com/es-es/library/system.web.aspx" target="_blank"&gt;System.Web&lt;/a&gt;, y si estamos en una aplicaci&amp;oacute;n de escritorio, no me parece demasiado elegante. Supongo que en una aplicaci&amp;oacute;n Web, se notar&amp;iacute;a menos, pero un control es para lo que es, y si empezamos a usar cosas para lo que no son es cuando aparecen los problemas.&lt;/p&gt;
&lt;p&gt;Esto mismo se podr&amp;iacute;a hacer usando simplemente un objeto &lt;a href="http://cs.crisfervil.com/controlpanel/blogs/posteditor.aspx/System.Web.UI.HtmlTextWriter" target="_blank"&gt;HtmlWriter&lt;/a&gt;, pero el c&amp;oacute;digo quedar&amp;iacute;a bastante m&amp;aacute;s complejo que este.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_08B70AE7.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_207363AF.png" border="0" height="481" width="756" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una de las ventajas de este m&amp;eacute;todo es la posibilidad de a&amp;ntilde;adir estilos din&amp;aacute;micamente, por ejemplo usando un fichero css como este:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_348F10E9.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_560E4078.png" border="0" height="364" width="228" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Habr&amp;iacute;a que a&amp;ntilde;adir unas cuantas l&amp;iacute;neas m&amp;aacute;s al m&amp;eacute;todo anterior, para inyectar el contenido del css al html generado.&lt;/p&gt;
&lt;p&gt;Esta alternativa abre la posibilidad de tener varios formatos de exportaci&amp;oacute;n, definidos en distintos archivos css, y un &amp;uacute;nico m&amp;eacute;todo para realizar la exportaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_139E2EF3.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_3061E6CC.png" border="0" height="889" width="763" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una de las desventajas de esta m&amp;eacute;todo podr&amp;iacute;a ser el rendimiento. El volumen de informaci&amp;oacute;n generado es bastante alto, y ante un n&amp;uacute;mero elevado de filas y de columnas, el rendimiento se resiente. &lt;/p&gt;
&lt;p&gt;Este ser&amp;iacute;a el contenido del texto generado, para un DataTable con dos filas y dos columnas&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_5AD3394B.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_534A5A8F.png" border="0" height="686" width="836" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Abri&amp;eacute;ndolo con el Excel:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_29004416.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_714D89E5.png" border="0" height="241" width="390" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;S&amp;eacute; que funciona con el Excel 2003 y posteriores, pero sospecho, aunque no estoy seguro, de que tambi&amp;eacute;n lo reconoce el Excel 2000.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-excelexportlib.aspx"&gt;Tambi&amp;eacute;n se puede exportar a Excel, usando el formato Office Xml.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9489" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Snippets/default.aspx">Snippets</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Excel/default.aspx">Excel</category></item><item><title>DataTable To Excel con ExcelExportLib</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/11/23/datatable-to-excel-con-excelexportlib.aspx</link><pubDate>Mon, 23 Nov 2009 10:36:00 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9488</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Dejo este snippet, por si a alguno le puede servir. &lt;/p&gt;  &lt;p&gt;Es una manera más de exportar un DataTable, o un DataSet a un fichero Excel, pero esta vez usando el formato Office Xml.&lt;/p&gt;  &lt;p&gt;Wikipedia: &lt;a title="http://es.wikipedia.org/wiki/Microsoft_Office_XML" href="http://es.wikipedia.org/wiki/Microsoft_Office_XML" target="_blank"&gt;http://es.wikipedia.org/wiki/Microsoft_Office_XML&lt;/a&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Los formatos &lt;b&gt;Microsoft Office XML&lt;/b&gt; (no confundir con &lt;a href="http://es.wikipedia.org/wiki/Office_Open_XML" target="_blank"&gt;Office Open XML&lt;/a&gt;) son formatos de documento basados en XML (o &lt;a href="http://es.wikipedia.org/wiki/XML_Schema" target="_blank"&gt;lenguajes de esquema XML&lt;/a&gt;) introducidos en versiones de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Office" target="_blank"&gt;Microsoft Office&lt;/a&gt; anteriores a &lt;a href="http://es.wikipedia.org/wiki/Office_2007" target="_blank"&gt;Office 2007&lt;/a&gt;. En Microsoft Office XP se introdujo un nuevo formato &lt;a href="http://es.wikipedia.org/wiki/XML" target="_blank"&gt;XML&lt;/a&gt; para almacenar hojas de cálculo de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Excel" target="_blank"&gt;Excel&lt;/a&gt; y Office 2003 añadió formatos basados en XML para documentos de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Word" target="_blank"&gt;Word&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Estos formatos fueron reemplazados por la especificación &lt;a href="http://es.wikipedia.org/wiki/Office_Open_XML" target="_blank"&gt;Office Open XML&lt;/a&gt; (ECMA-376) en &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Office_2007" target="_blank"&gt;Microsoft Office 2007&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;El formato Excel xml tiene más o menos la siguiente apariencia: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_6FEE8EB9.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="546" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_0CF9CE33.png" width="689" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Una de las ventajas de este formato, es la posibilidad de incluir formatos (valga la redundancia), fórmulas, etc. y que son reconocidos desde la versión 2003. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_57839CBE.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="114" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_6E4574F8.png" width="270" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_097DCDFA.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="267" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_3458C2BD.png" width="822" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Más información acerca del formato: &lt;a title="http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx" href="http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una exportación sencilla, no tiene ninguna complicación, pero so quisiéramos añadir ciertas complejidades, hay mucho código que escribir.&lt;/p&gt;  &lt;p&gt;Por eso, me he apoyado en esta librería que proporciona un modelo de objetos bastante sencillo, que permite centrarse en la información a generar, y delegar el “renderizado” del documento xml.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://excelexportlib.codeplex.com/" href="http://excelexportlib.codeplex.com/" target="_blank"&gt;http://excelexportlib.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_438F2B8A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="216" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_62D4630E.png" width="843" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Traducción: ExcelExportLib es una librería de exportación simple que crea un archivo .xml. Este archivo puede ser abierto en Excel. Al contrario que los archivos &lt;a href="http://es.wikipedia.org/wiki/CSV" target="_blank"&gt;csv&lt;/a&gt;, este formato contiene información de formato. La principal ventaja del proyecto es que permite la exportación de datos en Excel sin necesidad de ejecutar Excel.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A mí lo que me gustó de la librería es lo sencillita que es. Simple, pero potente.&lt;/p&gt;  &lt;p&gt;Un ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_0DAF57D2.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="377" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_6EFAFE97.png" width="755" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bueno, y finalmente el snippet.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_2331B88F.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="234" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_124D149F.png" width="525" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_3D943C57.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="641" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_2CB22918.png" width="656" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Por supuesto, al Excel generado se le pueden añadir todo tipo de formatos, fórmulas, totales, etc.&lt;/p&gt;  &lt;p&gt;Y allí donde ExcelExportLib no llegue, siempre se puede añadir funcionalidad propia. &lt;/p&gt;  &lt;p&gt;Normalmente para saber cómo se traduce a xml una característica del documento Excel, por ejemplo una fórmula, un formato, etc., se pueden consultar las especificaciones, pero lo más sencillo suele ser generar un documento con la características en cuestión, guardar el archivo en formato xml y ver el resultado.&lt;/p&gt;  &lt;p&gt;Por ejemplo, ¿cómo se especifica la característica de formato condicional?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_7BB2786A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="195" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_38D633F0.png" width="590" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Guardamos el documento en formato xml….&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_23E7422E.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="424" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_73565526.png" width="744" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Y abrimos el resultado con un editor de texto, o uno xml.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_36C0E73A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="207" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_0869F23E.png" width="722" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;PD: No suelo pegar el código, por un trauma personal. He sufrido el copy-pasteado de mucha gente, y la verdad es que no se lo deseo a nadie. Por eso pongo la imagen, y que cada uno escriba su propio código. Perdón por los inconvenientes ocasionados. ;)&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9488" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Snippets/default.aspx">Snippets</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Excel/default.aspx">Excel</category></item><item><title>Novedades acerca del caso LSE</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/11/23/novedades-acerca-del-caso-lse.aspx</link><pubDate>Mon, 23 Nov 2009 10:00:00 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9486</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;No s&amp;eacute; si habr&amp;aacute;s le&amp;iacute;do algo acerca del caso de la &lt;a href="http://www.londonstockexchange.com/home/homepage.htm" target="_blank"&gt;London Stock Exchange&lt;/a&gt;, en el que se hab&amp;iacute;a reemplazado el sistema existente construido sobre linux y java, por un sistema completamente nuevo basado en el .net framework, windows y sql server.&lt;/p&gt;
&lt;p&gt;Si no, en este post de Jorge viene muy bien explicada toda la historia:    &lt;br /&gt;&lt;a title="http://geeks.ms/blogs/jorge/archive/2009/10/22/el-caso-de-la-lse-london-stock-exchange-y-los-procesos-en-tiempo-real.aspx" href="http://cs.crisfervil.com/blogs/jorge/archive/2009/10/22/el-caso-de-la-lse-london-stock-exchange-y-los-procesos-en-tiempo-real.aspx" target="_blank"&gt;http://geeks.ms/blogs/jorge/archive/2009/10/22/el-caso-de-la-lse-london-stock-exchange-y-los-procesos-en-tiempo-real.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bueno, pues resulta que finalmente han salido a la luz estas im&amp;aacute;genes que relatan &lt;span style="text-decoration:line-through;"&gt;fielmente&lt;/span&gt; como fue la entrevista de trabajo del Project Manager que contrataron para dirigir dicho proyecto. Por supuesto, no puedo citar mis fuentes.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_2DDF98A7.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_7B1222E3.png" border="0" height="209" width="604" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.dilbert.com/" href="http://www.dilbert.com/"&gt;http://www.dilbert.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9486" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/General/default.aspx">General</category></item><item><title>Resumen Examen MCTS 70-536 - Autenticación y Autorización</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/21/resumen-examen-mcts-70-536-autenticaci-243-n-y-autorizaci-243-n.aspx</link><pubDate>Wed, 21 Oct 2009 21:59:24 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9479</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&amp;amp;locale=en-us" target="_blank"&gt;&lt;img style="display:inline;margin-left:0px;margin-right:0px;" src="https://www.digitalguru.com/v/vspfiles/photos/9780735626195-2T.jpg" alt="" /&gt;&lt;/a&gt;&amp;#160;&lt;a title="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&amp;amp;locale=en-us" href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&amp;amp;locale=en-us"&gt;http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&amp;amp;locale=en-us&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Este es otro de los resúmenes que he rescatado. Va de la gestión de la seguridad en el .net Framework.&lt;/p&gt;  &lt;p&gt;Como curiosidad, indicar que en la &lt;a href="http://www.rae.es/" target="_blank"&gt;RAE&lt;/a&gt; sólo existe el término &lt;em&gt;Autenticación&lt;/em&gt;, y no &lt;em&gt;Autentificación&lt;/em&gt;. Se define &lt;em&gt;autenticación&lt;/em&gt; como la acción y el efecto de &lt;em&gt;autenticar&lt;/em&gt;, y &lt;em&gt;autenticar&lt;/em&gt; es &amp;quot;autorizar o legalizar algo&amp;quot;, o bien &amp;quot;dar fe de la verdad de un hecho o documento con autoridad legal&amp;quot; (fuente: &lt;a href="http://www.rae.es" target="_blank"&gt;diccionario online&lt;/a&gt; de la &lt;a href="http://www.rae.es/" target="_blank"&gt;RAE&lt;/a&gt;). Creo que conocer el significado de las palabras es importante para aclarar nuestras ideas y trasmitirlas con fidelidad a nuestros pensamientos. Por eso me detengo en estos detalles.&lt;/p&gt;  &lt;p&gt;Obs de último momento: Están admitidos tanto el verbo &lt;em&gt;autenticar&lt;/em&gt; como &lt;em&gt;autentificar&lt;/em&gt;. Ambos términos tienen el mismo significado. &lt;a href="http://buscon.rae.es/dpdI/SrvltConsulta?lema=autentificar" target="_blank"&gt;Ver + info aquí&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Bueno... a lo que íbamos.&lt;/p&gt;  &lt;p&gt;En la jerga informática, que es la que nos interesa...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Autenticación&lt;/strong&gt;: Es el proceso de identificación de un usuario.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Autorización&lt;/strong&gt;: Es proceso por el que permite o deniega el acceso de un usuario a un recurso.&lt;/p&gt;  &lt;p&gt;La clase &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx" target="_blank"&gt;System.Security.Principal.WindowsIdentity&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; representa un usuario de Windows. No permite autenticar a un usuario; solo guarda el resultado de la autenticación. Estos son sus métodos más importantes: &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;width:578.25pt;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.principal.windowsidentity.getanonymous(VS.80).aspx" target="_blank"&gt;GetAnonymous&lt;/a&gt; (shared) &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:427.5pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;mso-bidi-font-weight:bold;"&gt;Devuelve un objeto &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx" target="_blank"&gt;WindowsIdentity&lt;/a&gt; que representa a un usuario anónimo. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;GetCurrent (shared) &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:427.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve un objeto &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx" target="_blank"&gt;WindowsIdentity&lt;/a&gt; que representa el usuario actual de Windows. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Impersonate (shared) &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:427.5pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve un objeto &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.principal.windowsimpersonationcontext(VS.80).aspx" target="_blank"&gt;WindowsImpersonationContext&lt;/a&gt; que representa un usuario concreto del sistema. Permite al código que se está ejecutando reemplazar a otro usuario de Windows. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;GetCurrent &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:427.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve el objeto &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsprincipal.aspx" target="_blank"&gt;WindowsPrincipal&lt;/a&gt;&lt;/i&gt; correspondiente al usuario. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;Estas son propiedades (no estáticas) de &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx" target="_blank"&gt;WindowsIdentity&lt;/a&gt;&lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;width:578.25pt;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;AuthenticationType &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;mso-bidi-font-weight:bold;"&gt;String que indica el método de autenticación. Generalmente &amp;quot;NTLM&amp;quot;. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;IsAnonymous &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;bool que indica si el usuario es anónimo. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;IsAuthenticated &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;bool que indica si el usuario ha sido autenticado. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;IsGuest &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;bool que indica si el usuario es un usuario &amp;quot;guest&amp;quot; o invitado. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:3;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;IsSystem &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;bool que indica si el usuario es un usuario de sistema. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:4;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Name &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;string con el nombre de usuario y el dominio en el que ha sido autenticado. Si posee una barra invertida (\) dentro del nombre, indica que el usuario ha si do autenticado por un dominio de Active Directory. En caso contrario la autenticación se produjo contra el equipo local. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Token &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;int con el token identificador del usuario. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;La clase &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsprincipal.aspx" target="_blank"&gt;WindowsPrincipal&lt;/a&gt;&lt;/strong&gt; proporciona acceso a los grupos de los que un usuario es miembro. Esta clase debe ser creada pasando como parámetro de su constructor una instancia de &lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx" target="_blank"&gt;WindowsIdentity&lt;/a&gt;, o &lt;/em&gt;bien llamando&amp;#160; al método GetCurrent() de &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx" target="_blank"&gt;WindowsIdentity&lt;/a&gt;. Estos son algunos de sus métodos:&lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;width:582.75pt;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.principal.windowsprincipal.isinrole(VS.80).aspx" target="_blank"&gt;IsInRole&lt;/a&gt; &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:432pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;bool que indica si el usuario es miembro del grupo especificado. &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;Las clases &lt;a href="http://msdn.microsoft.com/es-es/library/system.security.permissions.principalpermission.aspx" target="_blank"&gt;PrincipalPermission&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; y &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.permissions.principalpermissionattribute.aspx" target="_blank"&gt;PrincipalPermissionAttribute&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; permiten, en conjunto, saber si el usuario cumple o no unos criterios de &lt;em&gt;autorización&lt;/em&gt; determinados. &lt;/p&gt;  &lt;p&gt;Estas son las &lt;strong&gt;propiedades&lt;/strong&gt; de &lt;a href="http://msdn.microsoft.com/es-es/library/system.security.permissions.principalpermission.aspx" target="_blank"&gt;PrincipalPermission&lt;/a&gt;&lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;width:577.5pt;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Authenticated &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;mso-bidi-font-weight:bold;"&gt;bool que en caso de ser &lt;i&gt;true&lt;/i&gt;, indica que el usuario debe estar autenticado para poseer la autorización. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Name &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;string que indica el nombre que debe tener el usuario para poseer la autorización. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Role &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:426.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;string que indica el nombre del grupo al que debe pertenecer el usuario para poseer la autorización. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;strong&gt;     &lt;br /&gt;Métodos&lt;/strong&gt; de &lt;a href="http://msdn.microsoft.com/es-es/library/system.security.permissions.principalpermission.aspx" target="_blank"&gt;PrincipalPermission&lt;/a&gt;&lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;width:579pt;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:148.5pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Demand &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Comprueba que el usuario cumpla con los criterios de &lt;i&gt;Authenticated&lt;/i&gt;, &lt;i&gt;Name&lt;/i&gt; y &lt;i&gt;Role&lt;/i&gt; especificados en sus propiedades. En caso contrario, se lanza una &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.securityexception(VS.80).aspx" target="_blank"&gt;SecurityException&lt;/a&gt;. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:148.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;&amp;#160;&lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;strong&gt;     &lt;br /&gt;Seguridad Declarativa (Declarative RBS Demands)&lt;/strong&gt;: Indica al runtime, mediante atributos, que realize comprobaciones &lt;strong&gt;R&lt;/strong&gt;ole-&lt;strong&gt;B&lt;/strong&gt;ased &lt;strong&gt;S&lt;/strong&gt;ecurity (Seguridad basada en Roles) antes de ejecutar el código de un ensamblado, clase o método.&lt;/p&gt;  &lt;p&gt;Usar este tipo de atributos es la manera más segura de impedir la ejecución de código a usuarios no autorizados, aunque posee algunos inconvenientes.&lt;/p&gt;  &lt;p&gt;Para usar estos atributos, es no olvidar realizar los siguientes pasos:&lt;/p&gt;  &lt;p&gt;- Realizar una llamada a &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.appdomain.setprincipalpolicy.aspx" target="_blank"&gt;System.AppDomain.CurrentDomain.SetPrincipalPolicy&lt;/a&gt;&lt;/i&gt; indicando la política de seguridad para el &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.iprincipal.aspx" target="_blank"&gt;IPrincipal&lt;/a&gt; (usuario) que ejecutará nuestro código.     &lt;br /&gt;- Un bloque try catch para capturar accesos no autorizados. Si se denegara el acceso se lanzaría una &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.securityexception(VS.80).aspx" target="_blank"&gt;SecurityException&lt;/a&gt;.     &lt;br /&gt;- Los atributos &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.permissions.principalpermissionattribute(vs.80).aspx" target="_blank"&gt;PrincipalPermission&lt;/a&gt; para declarar los accesos requeridos al ensamblado, clase o método cuyo acceso se desee restringir.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Seguridad Imperativa&lt;/strong&gt;     &lt;br /&gt;Las validaciones usadas en la seguridad imperativa se realizan dentro del código y eliminan la limitación de la seguridad declarativa de restringir los accesos a grandes porciones de código. &lt;/p&gt;  &lt;p&gt;Los pasos para incluir la seguridad imperativa en el código son los siguientes:    &lt;br /&gt;- Realizar una llamada a &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.appdomain.setprincipalpolicy.aspx" target="_blank"&gt;System.AppDomain.CurrentDomain.SetPrincipalPolicy&lt;/a&gt;&lt;/i&gt; indicando la política de seguridad para el &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.iprincipal.aspx" target="_blank"&gt;IPrincipal&lt;/a&gt; (usuario) que ejecutará nuestro código.     &lt;br /&gt;- Un bloque try catch para capturar accesos no autorizados. Si se denegara el acceso se lanzaría una &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.securityexception(VS.80).aspx" target="_blank"&gt;SecurityException&lt;/a&gt;.     &lt;br /&gt;- Un objeto PrincipalPermission para especificar las restricciones que aplicarán al código.     &lt;br /&gt;- Una llamada a &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.permissions.principalpermissionattribute(vs.80).aspx" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.permissions.principalpermission(vs.80).aspx" target="_blank"&gt;PrincipalPermission&lt;/a&gt;&lt;/a&gt;.Demand() para verificar que el &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.principal.iprincipal(VS.80).aspx" target="_blank"&gt;IPrincipal&lt;/a&gt; especificado está autorizado.&lt;/p&gt;  &lt;p&gt;La clase &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.permissions.principalpermission(vs.80).aspx" target="_blank"&gt;PrincipalPermission&lt;/a&gt; posee 3 &lt;strong&gt;constructores&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;- PrincipalPermission(&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.permissions.permissionstate(VS.80).aspx" target="_blank"&gt;PermissionState&lt;/a&gt;): el enum PermissionState indica si la política de autorización es restrictiva o permisiva, es decir, si de primeras&amp;#160; no autorizamos al recurso a menos que cumpla el resto de requisitos, o si de primeras autorizamos al recurso, a menos que cumpla los requisitos.     &lt;br /&gt;- PrincipalPermission(Name, Role): Especifica como requisitos de autorización un nombre de usuario y un rol determinado.     &lt;br /&gt;- PrincipalPermission(Name, Role, Authenticated) Especifica como requisitos de autorización un nombre de usuario, un rol y un estado de autorización determinados.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Implementando usuarios y roles(grupos) propios&lt;/strong&gt;     &lt;br /&gt;Para realizar esta tarea es necesario implementar las interfaces &lt;i&gt;System.Security.Principal.IIdentity&lt;/i&gt; y &lt;i&gt;System.Security.Principal.IPrincipal&lt;/i&gt;. Estas interfaces permiten utilizar la infraestructura de acceso y autenticación de la plataforma. De hecho, las clases WindowsIdentity y WindowsPrincipal las implementan. De igual modo, en asp.net existen la clase FormsIdentity y PassportIdentity que también son implementaciones de estas intefaces.     &lt;br /&gt;Con lo cual, para implementar nuestro propio motor de autenticación y gestión de grupos y usuario, tirando por ejemplo, contra una base de datos, debemos, bien heredar de alguna de las clases vistas anteriormente o implementar estas interfaces.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Propiedades de &lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.iidentity.aspx" target="_blank"&gt;&lt;strong&gt;IIdentity&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;width:570pt;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;AuthenticationType &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:418.5pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;string para determinar el tipo de autenticación a usar. Para usar el de windows, NTLM. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;IsAuthenticated &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:418.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;booleano que indica si el proceso de autenticación ha sido válido. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:150pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Name &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:418.5pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;string con el nombre de usuario. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Métodos de &lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.iprincipal.aspx" target="_blank"&gt;&lt;strong&gt;IPrincipal&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;width:20cm;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:148.5pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Identity &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:417pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Objeto IIdentity que determina la identidad del usuario &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:148.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;IsInRole &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:417pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;bool que indica si el Identity pertenece al grupo o rol especificados. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;La excepción &lt;b&gt;&lt;i&gt;System.Security.Authentication.&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.authentication.authenticationexception.aspx" target="_blank"&gt;AuthenticationException&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; se lanza cuando se produce un error de autenticación.&lt;/p&gt;  &lt;p&gt;La excepción &lt;b&gt;&lt;i&gt;System.Security.Authentication.&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.authentication.invalidcredentialexception.aspx" target="_blank"&gt;InvalidCredentialException&lt;/a&gt;&lt;/i&gt;&lt;/b&gt; se lanza cuando el sistema ha denegado nuestra autenticación y no podemos volver a intentar autenticarnos.&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9479" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/MCP/default.aspx">MCP</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category></item><item><title>Windows Presentation Foundation bloqueado en Firefox – Sucesión de despropósitos</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/20/windows-presentation-foundation-bloqueado-en-firefox-sucesion-de-despropositos.aspx</link><pubDate>Tue, 20 Oct 2009 20:37:29 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9475</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Nada más abrir el Firefox…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_48368006.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_5A329DC6.png" width="551" height="392" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Este es el plug-in que permite ver &lt;a href="http://cs.crisfervil.com/blogs/crisfervil/archive/2007/11/27/aplicaciones-xbap.aspx" target="_blank"&gt;aplicaciones x-bap&lt;/a&gt; en Firefox&lt;/p&gt;  &lt;p&gt;Venga, le doy a ver más información… pero no se reconoce a sí mismo…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_0934D99E.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_7A0DD4F6.png" width="681" height="784" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_616E11D9.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_1F1AF996.png" width="511" height="512" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title="https://bugzilla.mozilla.org/show_bug.cgi?id=522777" href="https://bugzilla.mozilla.org/show_bug.cgi?id=522777" target="_blank"&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=522777&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.technet.com/srd/archive/2009/10/12/ms09-054.aspx" href="http://blogs.technet.com/srd/archive/2009/10/12/ms09-054.aspx" target="_blank"&gt;http://blogs.technet.com/srd/archive/2009/10/12/ms09-054.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Por lo visto el bloqueo es debido a una vulnerabilidad en aplicaciones &lt;a href="http://cs.crisfervil.com/blogs/crisfervil/archive/2007/11/27/aplicaciones-xbap.aspx" target="_blank"&gt;x-Bap&lt;/a&gt; que puede ser explotada usando este complemento para Firefox. La vulnerabilidad permite saltarse las protecciones del &lt;a href="http://msdn.microsoft.com/en-us/library/930b76w0(VS.80).aspx" target="_blank"&gt;SandBox&lt;/a&gt; en el que se ejecutan este tipo de aplicaciones. No he encontrado detalles más concretos acerca de cómo explotar esta vulnerabilidad.&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9475" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category></item><item><title>Windows Presentation Foundation bloqueado en Firefox – Sucesión de despropósitos</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/20/windows-presentation-foundation-bloqueado-en-firefox-sucesi-243-n-de-desprop-243-sitos.aspx</link><pubDate>Tue, 20 Oct 2009 20:37:00 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9481</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Nada m&amp;aacute;s abrir el Firefox&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://cs.crisfervil.com/blogs/crisfervil/image_48368006.png"&gt;&lt;img height="392" width="551" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_5A329DC6.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Este es el plug-in que permite ver &lt;a target="_blank" href="http://cs.crisfervil.com/blogs/crisfervil/archive/2007/11/27/aplicaciones-xbap.aspx"&gt;aplicaciones x-bap&lt;/a&gt; en Firefox&lt;/p&gt;
&lt;p&gt;Venga, le doy a ver m&amp;aacute;s informaci&amp;oacute;n&amp;hellip; pero no se reconoce a s&amp;iacute; mismo&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://cs.crisfervil.com/blogs/crisfervil/image_0934D99E.png"&gt;&lt;img height="784" width="681" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_7A0DD4F6.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://cs.crisfervil.com/blogs/crisfervil/image_616E11D9.png"&gt;&lt;img height="512" width="511" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_1F1AF996.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=522777" title="https://bugzilla.mozilla.org/show_bug.cgi?id=522777"&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=522777&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://blogs.technet.com/srd/archive/2009/10/12/ms09-054.aspx" title="http://blogs.technet.com/srd/archive/2009/10/12/ms09-054.aspx"&gt;http://blogs.technet.com/srd/archive/2009/10/12/ms09-054.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Por lo visto el bloqueo es debido a una vulnerabilidad en aplicaciones &lt;a target="_blank" href="http://cs.crisfervil.com/blogs/crisfervil/archive/2007/11/27/aplicaciones-xbap.aspx"&gt;x-Bap&lt;/a&gt; que puede ser explotada usando este complemento para Firefox. La vulnerabilidad permite saltarse las protecciones del &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/930b76w0(VS.80).aspx"&gt;SandBox&lt;/a&gt; en el que se ejecutan este tipo de aplicaciones. No he encontrado detalles m&amp;aacute;s concretos acerca de c&amp;oacute;mo explotar esta vulnerabilidad.&lt;/p&gt;
&lt;p&gt;Crossposted from &lt;a href="http://crisfervil.com"&gt;crisfervil.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9481" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category></item><item><title>Nene no gustar</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/16/nene-no-gustar.aspx</link><pubDate>Fri, 16 Oct 2009 08:29:46 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9474</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Así no progresamos… &lt;/p&gt;  &lt;p&gt;De acuerdo, hay un error en la escritura, pero uno me lo resuelve, y el otro no. &lt;/p&gt;  &lt;p&gt;Pequeños detalles que hacen que me siga costando tenerlo como buscador por defecto.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_527A214C.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_4CFB8ADB.png" width="610" height="365" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_1AE39EB7.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_113B3081.png" width="818" height="288" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Venga.. vale… vamos a colaborar….&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_3B2B08DC.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_5416B354.png" width="480" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9474" width="1" height="1"&gt;</description></item><item><title>Resumen Examen MCTS 70-536 - Criptografía</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/16/resumen-examen-mcts-70-536-criptograf-237-a.aspx</link><pubDate>Fri, 16 Oct 2009 08:03:19 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9473</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Este es un resumen que hice en su día de los temas de criptografía para el examen de certificación. Lo pongo por aquí porque sigue siendo válido y por si a alguno le puede interesar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://vtortola.wordpress.com/2007/06/27/70-536-resumen-67-seguridad-de-aplicacion-usuario-y-datos/" target="_blank"&gt;Aquí&lt;/a&gt; encontraréis un resumen parecido elaborado por mi amigo &lt;a href="http://vtortola.net/" target="_blank"&gt;Valeriano&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Criptografía Simétrica&lt;/b&gt;     &lt;br /&gt;Es el mecanismo de encriptación mediante el cual se pueden encriptar o desencriptar datos utilizando una clave secreta que debe ser conocida por el codificador y el decodificador del mensaje. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;b&gt;Criptografía Asimétrica&lt;/b&gt;     &lt;br /&gt;Es el mecanismo que permite encriptar o desencriptar datos mediante un par de claves, una privada, conocida solo por el codificador y otra pública, conocida por el decodificador.     &lt;br /&gt;La criptografía asimétrica, elimina el problema de la transmisión de la clave secreta entre el codificador y el decodificador del mensaje. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt; &lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;Usando la criptografía Simétrica con .net Framework&lt;/b&gt;     &lt;br /&gt;Las clases que proporcionan servicios de criptografía se encuentran agrupados en el espacio de nombres &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx" target="_blank"&gt;System.Security.Cryptography&lt;/a&gt;.     &lt;br /&gt;Se proporcionan 4 algoritmos para trabajar con criptografía simétrica: &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Algoritmo                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Longitud Máxima de la Clave                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Descripción                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;RijndaelManaged                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;de 128 a 256 Bits, en incrementos de a 32 Bits              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Es un estándar de encriptación del gobierno estadounidense. Cabe resaltar simplemente que a diferencia de los demás algoritmos, la clase está íntegramente implementada sobre código administrado.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;DES                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;56 bits              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Es un algoritmo de encriptación simétrico que utiliza claves relativamente cortas, con lo cual es vulnerable a ataques. Por esto, no debería ser utilizado.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;RC2                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Variable              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Algoritmo surgido para solventar el problema de encriptación de claves cortas de DES.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:3;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;TripleDES                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;156 bits, de los cuales son efectivos únicamente 112              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Básicamente consiste en pasar el DES 3 veces.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;b&gt;Vector de Inicialización (IV):&lt;/b&gt; Es un valor utilizado por el algoritmo de encriptación simétrico para &amp;quot;oscurecer&amp;quot; el primer bloque de datos encriptados, lo que aumenta la dificultad de obtener un acceso no autorizado al mensaje. &lt;/p&gt;  &lt;p&gt;Las clases utilizadas para trabajar con algoritmos simétricos derivan de &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.symmetricalgorithm.aspx" target="_blank"&gt;System.Security.Cryptography.SymmetricAlgorithm&lt;/a&gt;&lt;b&gt;&lt;/b&gt;, y exponen las siguientes propiedades y métodos: &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:87.75pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Propiedades               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:88.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;BlockSize               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Obtiene o establece el número de Bits (ojo, Bits no Bytes) que el algoritmo puede procesar en cada vuelta.              &lt;br /&gt;Esta es una propiedad que generalmente no suele ser utilizada por el programador.               &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:89.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;FeedBackSize               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Obtiene o establece el FeedBackSize de la operación. Igual que la anterior, puede ser ignorada.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:90pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;IV               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Obtiene o establece el array de bytes utilizado como vector de inicialización del algoritmo.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:3;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:90.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Key               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Obtiene o establece el array de bytes utilizado como clave por el algoritmo simétrico.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:4;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:91.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;KeySize               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Obtiene o establece el tamaño &lt;b&gt;en bits&lt;/b&gt; de la clave utilizada.               &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:5;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.cryptography.symmetricalgorithm.legalblocksizes(VS.80).aspx" target="_blank"&gt;LegalBlockSizes&lt;/a&gt;                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Array de KeySizes que contiene los tamaños de clave admitidos por el algoritmo.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:6;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.cryptography.symmetricalgorithm.legalkeysizes(vs.80).aspx" target="_blank"&gt;LegalKeySizes&lt;/a&gt;                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Array de KeySizes que contiene los tamaños de clave admitidos por el algoritmo.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:7;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.cryptography.symmetricalgorithm.mode(vs.80).aspx" target="_blank"&gt;Mode&lt;/a&gt;                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Define uno de los aspectos del algoritmo de encriptación. Es uno de los valores definidos en la Enum &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.cryptography.ciphermode(VS.80).aspx" target="_blank"&gt;CypherMode&lt;/a&gt;.               &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:8;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Métodos               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:9;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;CreateDecryptor                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Crea el objeto ICryptoTransform que el objeto&amp;#160; CryptoStream necesita para &lt;b&gt;Desencriptar&lt;/b&gt; datos.               &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:10;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;CreateEncryptor                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Crea el objeto ICryptoTransform que el objeto CryptoStream necesita para &lt;b&gt;Encriptar&lt;/b&gt; datos.               &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:11;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;GenerateIV                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Genera aleatoriamente un vector de inicialización para usar con el algoritmo.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:12;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;GenerateKey                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Genera aleatoriamente una clave para usar con el algoritmo.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:13;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:92.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;ValidKeySize                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:492.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve un bool que indica si el tamaño de la clase especificada en la propiedad Key es válido para ser utilizado con el algoritmo. Muy útil si trabajamos sin conocer exactamente qué algoritmo vamos a usar.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;b&gt;Creando una clave simétrica      &lt;br /&gt;&lt;/b&gt;Podemos crear una clave simétrica y un vector de inicialización a partir de una contraseña definida por el usuario mediante la clase &lt;b&gt;&lt;i&gt;Rfc2898DeriveBytes&lt;/i&gt;&lt;/b&gt;&lt;i&gt;. &lt;/i&gt;Además de la contraseña del usuario, necesitaremos un valor de salto, que debe ser conocido por el codificador y el decodificador del mensaje.     &lt;br /&gt;Al constructor de la clase &lt;b&gt;&lt;i&gt;Rfc2898DeriveBytes&lt;/i&gt;&lt;/b&gt;&lt;i&gt; &lt;/i&gt;pasaremos la clave definida por el usuario y el valor de salto, codificado en un array de bytes. Posteriormente obtendremos la clave y el vector de inicialización generados mediante el método &lt;b&gt;GetBytes&lt;/b&gt;. A este método, debemos indicar en bytes, la longitud de la clave y el vector que necesitamos obtener. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Pasos para realizar operaciones de cifrado/descifrado      &lt;br /&gt;&lt;/b&gt;1- Crear el objeto SymmetricAlgorithm que contendrá la infraestructura relativa al algoritmo que vayamos a usar.     &lt;br /&gt;2- Especificar la clave simétrica y el IV o ambos.     &lt;br /&gt;3- Crear el objeto ICryptoTransform, llamando a SymmetricAlgorithm.CreateEncryptor() o SymmetricAlgorithm.CreateDecryptor() según la operación que vayamos a realizar.     &lt;br /&gt;4- Crear un objeto Stream, en que hará de origen o destino de los datos.     &lt;br /&gt;5- Crear un obeto CryptoStream unsando el Stream de datos que creamos en el paso 4 y el ICryptoTransform del paso 3.     &lt;br /&gt;6- Leer o Escribir en el CryptoStream como si fuera un Stream corriente.     &lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Ejemplo:      &lt;br /&gt;&lt;/b&gt;Crearemos un WinForm en el que agregaremos los siguientes controles:     &lt;br /&gt;- Un ComboBox cmbAlgorithm que contendrá la lista de algoritmos disponibles.     &lt;br /&gt;- Un TextBox txtKey que contendrá la clave a utilizar para cifrar/descifrar.     &lt;br /&gt;- Un TextBox txtText que contendrá el texto sobre el que realizaremos la operación y en que mostraremos los resultados.     &lt;br /&gt;- Un Button btnEncrypt que lanzará el proceso de encriptación.     &lt;br /&gt;- Un Button btnDecrypt que lanzará el proceso de desencriptación.&lt;/p&gt;  &lt;p&gt;Crearemos primeramente una función que nos devuelva el valor en el formato correcto para asignar a la Key o al IV.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_224485A8.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_0482FAE9.png" width="590" height="165" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Posteriormente, creamos esta función que nos permitirá encriptar o desencriptar según el parámetro&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image8_2A0C784A.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image8_thumb_0406A227.png" width="748" height="568" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Finalmente, llamamos a la función en el Click de los botones&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image16_1FE7B152.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image16_thumb_4CFC9E20.png" width="426" height="161" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Criptografía Asimétrica&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Algoritmos proporcionados por la plataforma: El algoritmo RSA y el DSA y las clases que lo implementan son &lt;b&gt;RSACryptoServiceProvider&lt;/b&gt; y &lt;b&gt;DSACryptoServiceProvider&lt;/b&gt;, respectivamente. Ambas implementaciones son una mera fachada del api de Windows que proporciona esta funcionalidad, y se ejecutan en código no administrado.&lt;/p&gt;  &lt;p&gt;Al igual que los algoritmos simétricos, las clases que permiten implementar estos algoritmos derivan de &lt;i&gt;System.Security.Cryptography.&lt;b&gt;AsymmetricAlgorithm&lt;/b&gt;.&lt;/i&gt;&amp;#160; Esta clase expone las siguientes propiedades: &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Propiedades               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:430.5pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;KeyExchangeAlgorithm               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:430.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve el nombre del algoritmo que se está utilizando.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;KeySize               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:430.5pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve el tamaño &lt;b&gt;en bits&lt;/b&gt; de las claves utilizadas.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;LegalKeySizes               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:430.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Array con los tamaños de claves permitidos por el algoritmo.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:3;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SignatureAlgorithm               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:430.5pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve la URL de un documento XML que describe la firma del algoritmo.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:4;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.cryptography.rsacryptoserviceprovider.persistkeyincsp(VS.80).aspx" target="_blank"&gt;PersistKeyInCsp&lt;/a&gt;                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:430.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve o establece un bool que indica si la clave se almacenará en el CSP (Crypto Service Provider).              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;&lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.cryptography.rsacryptoserviceprovider.usemachinekeystore(vs.80).aspx" target="_blank"&gt;UseMachineKeyStore&lt;/a&gt;                &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:430.5pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Obtiene o establece un valor que indica si la clave debe conservarse en el almacén de claves del equipo en lugar del almacén de perfiles de usuario.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;b&gt;Métodos expuestos por la clase RSACryptoServiceProvider&lt;/b&gt; &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Decrypt               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Desencripta datos encriptados con el algoritmo RSA             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Encrypt               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Encripta datos usando el algoritmo RSA             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;ExportParameters               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Devuelve una estructura &lt;a href="http://msdn2.microsoft.com/es-es/library/system.security.cryptography.rsaparameters(VS.80).aspx" target="_blank"&gt;RSAParameters&lt;/a&gt; que representa los parámetros estándar (las claves privada/pública) para el algoritmo RSA. Admite un parámetro booleano que en caso de ser false incluye en la estructura únicamente la clave pública.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;FromXmlString               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Importa el par de claves a partir de la cadena xml suministrada.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:3;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;ImportParameters               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Carga el par de claves a partir de la estructura RSAParameters suministrada.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:4;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SignData               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Calcula el valor hash de la matriz de bytes especificada mediante el algoritmo hash proporcionado y firma el valor hash resultante.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:5;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SignHash               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Calcula la firma del valor hash especificado cifrándolo con la clave privada.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:6;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;VerifyData               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Verifica la firma especificada comparándola con el resultado de calcular la firma de los datos especificados.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:7;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;VerifyHash               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:429pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Verifica el valor hash especificado comparándola con el resultado de calcular el valor Hash para los datos especificados.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;¿Cómo Importar y Exportar o persistir claves asimétricas?&lt;/b&gt;     &lt;br /&gt;Para exportar la claves de un algoritmo RSA, podemos recurrir al método ExportParameters de la clase RSACryptoServiceProvider, especificando en el único parámetro booleano admitido, si deseamos exportar tabién la clave privada. Este método nos devolverá una estructura RSAParameters que podemos convertir fácilmente a un array de bytes y transmitir o almacenar donde queramos.&lt;/p&gt;  &lt;p&gt;Adicionalmente, la clase &lt;b&gt;AsymmetricAlgorithm&lt;/b&gt; expone el método &lt;b&gt;ToXmlString()&lt;/b&gt;, que podemos usar igualmente junto con &lt;b&gt;FromXmlString()&lt;/b&gt; para realizar tareas de importación/exportación de claves.&lt;/p&gt;  &lt;p&gt;También es posible abstraerse del medio de persistencia utilizando el almacenamiento proporcionado por el CSP (Crypto Service Provider). Para esto recurriremos al constructor de la clase RSACryptoServiceProvider que admite un parámetro de tipo CspParameters, pasándole una instancia de esta clase con la propiedad KeyContainerName establecida al nombre con el que identificaremos al par de claves en el almacenamiento.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Encryptar y Desencriptar mensajes usando el Algoritmo RSA&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Para estas operaciones &lt;b&gt;RSACryptoServiceProvider&lt;/b&gt; expone los métodos &lt;b&gt;Encrypt()&lt;/b&gt; y &lt;b&gt;Decrypt()&lt;/b&gt;; ambas devuelven un array de bytes con los datos transformados y requieren dos parámetros:&lt;/p&gt;  &lt;p&gt;-byte[] rgb : Datos sobre los que se va a operar.&lt;/p&gt;  &lt;p&gt;-bool fOAEP : Estableciéndolo a true, indicamos al método que&amp;#160; utice el sistema OAEP para truncar los datos sobrantes. Lo importante de este parámetro es que debe usarse el mismo valor tanto para el cifrado como para la descifrado de los datos.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Algoritmos de Hash&lt;/b&gt; (does somebody knows the spanish translation of &amp;quot;hash&amp;quot;?)&lt;/p&gt;  &lt;p&gt;Bueno, según el &lt;a href="http://www.wordreference.com/" target="_blank"&gt;WordReference&lt;/a&gt; es &amp;quot;&lt;a href="http://www.wordreference.com/es/translation.asp?tranword=hash&amp;amp;v=js" target="_blank"&gt;sofrito de carne&lt;/a&gt;&amp;quot;.&lt;/p&gt;  &lt;p&gt;En el argot informático, una clave hash es un valor que se calcula a partir de unos datos y que, al menos en teoría, identifica unívocamente a dichos datos. Estas claves tienen varias aplicaciones, ente ellas por ejemplo, la posibilidad de crear identificadores de archivos de gran tamaño, o la comprobación de la originalidad de un documento.&lt;/p&gt;  &lt;p&gt;Al contrario que la operación de encriptación, la creación de una clave hash es un proceso irreversible; a partir del valor obtenido no se puede volver al dato original.&lt;/p&gt;  &lt;p&gt;Existen dos tipos de algoritmos hash; los no cifrados y los cifrados. Los algoritmos hash cifrados o HMAC (Hash-based Message Authentication Code) se pueden utilizar para determinar si se ha manipulado un mensaje enviado a través de un canal no seguro, siempre que el remitente y el receptor compartan una clave secreta. El remitente calcula el valor hash para los datos originales y envía el valor hash y los datos originales como un solo mensaje. El receptor actualiza el valor hash en el mensaje recibido y comprueba que el código HMAC calculado coincide con el transmitido.    &lt;br /&gt;Cualquier cambio en los datos o en el valor hash producirá una desigualdad, ya que es necesario conocer la clave secreta para cambiar el mensaje y reproducir el valor hash correcto. Por consiguiente, si el original y los valores hash calculados coinciden, el mensaje se autentica.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Algoritmos no cifrados&lt;/b&gt; &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:69.75pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Clase Abstracta               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:152.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Clase Concreta               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:350.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Descripción               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:69pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;MD5               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:153pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;MD5CryptoServiceProvider             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:350.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;M&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;essage &lt;b&gt;D&lt;/b&gt;igest. El más usado. La longitud de la clave generada es de 128 bits.               &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:69pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;RIPEMD160               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:153pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;RIPEMD160Managed             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:350.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Su clave tiene 160 bits. Es nuevo en el framework 2.0 y se ha añadido con la intención de sustituir a MD5.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:69pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA1               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:153pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA1CryptoServiceProvider             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:350.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;S&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;ecure &lt;b&gt;H&lt;/b&gt;ash &lt;b&gt;A&lt;/b&gt;lgorithm. Su clave tiene 160 bits.              &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:3;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:69pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA256               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:153pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA256Managed             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:350.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Su clave tiene 256 bits.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:4;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:69pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA384               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:153pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA384Managed             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:350.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Su clave tiene 384 bits.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:69pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA512               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:153pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;SHA512Managed             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:350.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Su clave tiene 512 bits.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;b&gt;Algoritmos cifrados&lt;/b&gt; &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="LightShading-Accent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Clase               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:421.5pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Descripción               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;HMACSHA1               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:421.5pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;mso-ansi-language:en-us;"&gt;Hash-based Message Authentication Code using &lt;i&gt;SHA1&lt;/i&gt;. &lt;/span&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Admite claves HMAC de cualquier longitud y la clave generada tiene 160 bits.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;MACTripleDES&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;               &lt;p&gt;&lt;/p&gt;             &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:421.5pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:115%;margin-bottom:10pt;" class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;mso-ansi-language:en-us;"&gt;Message Authentication Code using TripleDES. &lt;/span&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;"&gt;Admite claves de 8, 16 ó 24 bytes y genera claves de 64 bits.             &lt;p&gt;&lt;/p&gt;           &lt;/span&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;b&gt;Pasos para generar claves hash no cifradas      &lt;br /&gt;&lt;/b&gt;1- Crear el objeto Algoritmo     &lt;br /&gt;2- Trasladar los datos a tratar a un array de bytes o a un Stream     &lt;br /&gt;3- Llamar al método de cifrado HashAlgorithm.ComputeHash()     &lt;br /&gt;4- Obtener el array de bytes generado en la propiedad HashAlgorithm.Hash&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Ejemplo&lt;/b&gt;: En una aplicación de consola, generamos el valor hash mediante el algoritmo MD5 para cualquier texto introducido por el usuario.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image23_2C092B79.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image23_thumb_2A585FA5.png" width="489" height="266" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Pasos para generar claves hash cifradas      &lt;br /&gt;&lt;/b&gt;1- Crear la clave secreta que deberá ser compartida por las partes interesada     &lt;br /&gt;2- Crear el objeto algoritmo utilizando la clave secreta generada. Si no se especifica una clave, se creará una por defecto.     &lt;br /&gt;3- Trasladar los datos a tratar a un array de bytes o a un Stream.     &lt;br /&gt;4- Llamar al método de cifrado KeyedHashAlgorithm.ComputeHash()     &lt;br /&gt;5- Obtener el array de bytes generado en la propiedadKeyedHashAlgorithm.Hash&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Ejemplo&lt;/b&gt;: En una aplicación de consola, generamos el valor hash mediante el algoritmo HMACSHA1&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image27_61BE70D3.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image27_thumb_203398AD.png" width="651" height="355" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Y... cómo se yo si la hash es válida o no? (pendiente)&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Firma de archivos      &lt;br /&gt;&lt;/b&gt;La firma digital de un archivo es un valor que puede adjuntarse a un fichero como prueba de que alguien, en posesión de una determinada clave privada ha creado un archivo y que éste no ha sido modificado desde su creación. No debe confundirse la firma digital con la encriptación. La firma digital no protege el secreto de un archivo; para ello, el archivo debe encriptarse.&lt;/p&gt;  &lt;p&gt;Las clases que realizan la tarea de firma de archivos son DSACryptoServiceProvider y RSACryptoServiceProvider. Los métodos de estas clases encargados de estas operaciones son los siguientes: &lt;/p&gt;  &lt;table style="border-bottom:medium none;border-left:medium none;border-collapse:collapse;border-top:medium none;border-right:medium none;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="MsoTableLightShadingAccent1" cellspacing="0" cellpadding="0"&gt;     &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-yfti-cnfc:5;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;SignHash &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:423.75pt;padding-right:5.4pt;border-top:#4f81bd 1pt solid;border-right:medium none;padding-top:0cm;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-yfti-cnfc:1;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Genera una firma digital basada en la clave Hash de un archivo. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:0;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;SignData &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:423.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Genera una firma digital generando primero la clave Hash de un archivo y luego generando la firma para dicha Hash. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:1;"&gt;       &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-yfti-cnfc:4;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;VerifyHash &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:medium none;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:423.75pt;padding-right:5.4pt;border-top:medium none;border-right:medium none;padding-top:0cm;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Verifica que la firma especificada sea válida para la clave Hash especificada &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr style="mso-yfti-irow:2;mso-yfti-lastrow:yes;"&gt;       &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:149.25pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-yfti-cnfc:68;" class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;VerifyData &lt;/span&gt;              &lt;p&gt;&lt;/p&gt;           &lt;/b&gt;&lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td style="border-bottom:#4f81bd 1pt solid;border-left:medium none;padding-bottom:0cm;padding-left:5.4pt;width:423.75pt;padding-right:5.4pt;background:#d3dfee;border-top:medium none;border-right:medium none;padding-top:0cm;mso-border-bottom-themecolor:accent1;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;         &lt;p style="line-height:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-yfti-cnfc:64;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#333333;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:es;"&gt;Verifica que la firma especificada sea válida para el contenido del archivo especificado. &lt;/span&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/p&gt;          &lt;p&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;b&gt;Pasos para generar la firma digital para un fichero      &lt;br /&gt;&lt;/b&gt;1- Crear el objeto algoritmo     &lt;br /&gt;2- Trasladar los datos a tratar a un array de bytes o a un stream     &lt;br /&gt;3- Llamar al método SignData() y guardar la firma     &lt;br /&gt;4- Exportar la clave publica     &lt;br /&gt;Pasos para comprobar la validez de una firma digital para un fichero     &lt;br /&gt;1- Crear el objeto algoritmo     &lt;br /&gt;2- Importar la firma digital y la clave pública     &lt;br /&gt;3- Trasladar los datos a verificar a un array de bytes o a un stream     &lt;br /&gt;4- Llamar al método VerifyData()&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Ejemplo&lt;/b&gt;: En una aplicación de consola, generamos la firma digital para un archivo pasado por parámetro. El modificador -t como primer parámetro indica la acción de comprobar la validez de la firma.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image38_1DAA66EF.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image38_thumb_2742AF58.png" width="552" height="465" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image43_2E323C10.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image43_thumb_6B72F0D7.png" width="555" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9473" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/MCP/default.aspx">MCP</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>RegisterArrayDeclaration</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/13/registerarraydeclaration.aspx</link><pubDate>Tue, 13 Oct 2009 12:32:00 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9472</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a title="http://msdn.microsoft.com/es-es/library/system.web.ui.clientscriptmanager.registerarraydeclaration.aspx" href="http://msdn.microsoft.com/es-es/library/system.web.ui.clientscriptmanager.registerarraydeclaration.aspx"&gt;http://msdn.microsoft.com/es-es/library/system.web.ui.clientscriptmanager.registerarraydeclaration.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_22CC7D7C.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="122" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_6B85F640.png" width="663" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_218A754E.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="98" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_1A6DC987.png" width="671" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Este código, contrariamente a lo que mi retorcida lógica esperaría, no registra el array en código cliente con el valor “4,5,6”, &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_2EC8F33A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="109" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_237F1D56.png" width="667" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; sino que produce el siguiente código JS:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_5C2C5814.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="144" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_295C51A0.png" width="689" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Esto, simplificado el máximo, se detecta fácilmente, pero si empezamos a retorcerlo….&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_7D41E55F.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="336" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_4F572358.png" width="650" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_72A6A8AE.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="130" alt="image" src="http://cs.crisfervil.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/crisfervil/image_5F00_thumb_5F00_02B57766.png" width="548" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;puede hacer que te tires un buen rato mirando código con cara de tonto.&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9472" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/asp.net/default.aspx">asp.net</category></item><item><title>Comentarios deshabilitados en TeraBIThia</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/12/comentarios-deshabilitados-en-terabithia.aspx</link><pubDate>Mon, 12 Oct 2009 21:30:33 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9471</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" src="http://www.mcfarlanedesamour.com/blog/wp-content/uploads/2009/07/nospam.gif" width="244" height="244" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Deshabilitaré temporalmente los comentarios en este sitio, debido a la ingente cantidad de spam que he recibido en el último mes.&lt;/p&gt;  &lt;p&gt;No doy abasto para borrarlos. &lt;/p&gt;  &lt;p&gt;Si queréis hacer algún comentario, están disponibles los mirrors de este sitio:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/crisfervil" target="_blank"&gt;http://geeks.ms/blogs/crisfervil&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://crisfervil.wordpress.com/" target="_blank"&gt;http://crisfervil.wordpress.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9471" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/General/default.aspx">General</category></item><item><title>[OPINION] La ciencia española no necesita tijeras</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/10/07/opinion-la-ciencia-espa-241-ola-no-necesita-tijeras.aspx</link><pubDate>Wed, 07 Oct 2009 22:31:03 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:9158</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://aldea-irreductible.blogspot.com/2009/10/la-ciencia-en-espana-no-necesita.html" target="_blank"&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" src="http://farm3.static.flickr.com/2488/3973473121_e76fde787c_o.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Me uno a esta &lt;a href="http://aldea-irreductible.blogspot.com/2009/10/la-ciencia-en-espana-no-necesita.html" target="_blank"&gt;iniciativa&lt;/a&gt; promovida desde &lt;a href="http://aldea-irreductible.blogspot.com/" target="_blank"&gt;La Aldea Irreductible&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Yo, al igual que mi colega &lt;a href="http://elbruno.com" target="_blank"&gt;Bruno&lt;/a&gt;, &lt;a href="http://geeks.ms/blogs/elbruno/archive/2009/10/07/opinion-la-ciencia-espa-241-ola-no-necesita-tijeras.aspx" target="_blank"&gt;también soy un invitado en este país&lt;/a&gt;, pero creo que también puedo arrimar el hombro XD&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=9158" width="1" height="1"&gt;</description></item><item><title>Oracle: Comparando Valores Nulos</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/09/22/oracle-comparando-valores-nulos.aspx</link><pubDate>Tue, 22 Sep 2009 06:45:46 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:8130</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Esta es otra de esas cosas que he aprendido últimamente a fuerza de engullir una ingente cantidad de código.&lt;/p&gt;  &lt;p&gt;Depurar o no depurar. Esa es la cuestión.&lt;/p&gt;  &lt;p&gt;Estaba intentando comparar el valor de un parámetro de un procedimiento almacenado con el de la columna de una tabla, y resulta que la expresión fallaba a veces. Es por el tratamiento que se hace de los valores nulos al realizar una comparación.&lt;/p&gt;  &lt;p&gt;Si alguno de los valores es nulo, cuando compare dicho valor con otro, aunque sea otro nulo, la expresión devuelve siempre false.&lt;/p&gt;  &lt;p&gt;Parece ser que ocurre lo mismo con las cadenas. Una cadena vacía es siempre distinta de otra cadena vacía.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_1B7823C7.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="88" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_6BBD0BF8.png" width="282" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Esta expresión siempre devuelve False&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_5D7E9308.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="97" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_525508BE.png" width="284" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Esta también&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_38ED0584.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="98" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_2DC37B3A.png" width="287" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Esta otra también&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_1F85024A.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="112" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_666E2547.png" width="468" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Si coincide que ambos son nulos, esta expresión también devolverá False&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_61F7A480.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="110" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_36B30D79.png" width="482" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Al final acabé con esta. Es una manera sencilla, aunque algo costosa, de comparar dos campos nullables.&lt;/p&gt;  &lt;p&gt;Si comparo dos valores, por ejemplo columnas de una tabla, y ambos son nulos, obtendré Verdadero.&lt;/p&gt;  &lt;p&gt;Versión de Oracle:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_0CD71B9F.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="285" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_4347CDA1.png" width="658" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=8130" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Oracle/default.aspx">Oracle</category></item><item><title>No es lo mismo</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/09/21/no-es-lo-mismo.aspx</link><pubDate>Mon, 21 Sep 2009 15:15:55 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:8103</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Pensaba yo que ordenar cadenas era lo mismo aquí que en la china, pero hete aquí que no.&lt;/p&gt;  &lt;p&gt;Oracle y .net no ordenan igual.&lt;/p&gt;  &lt;p&gt;Esto lo he descubierto por uno de esos errores que te hacen ir a casa harto de mirar código.&lt;/p&gt;  &lt;p&gt;Cómo lo ordenaría &lt;strong&gt;.net&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_3C568627.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="159" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_43098FAA.png" width="749" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Resultado:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_1E780226.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="347" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_305726A4.png" width="693" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Cómo ordenaría &lt;strong&gt;Oracle&lt;/strong&gt; la misma secuencia &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_6D0EAF34.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="251" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_21AF0B70.png" width="430" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Resultado:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_69FEE1F0.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="269" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_1BF6827B.png" width="142" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="0"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Oracle&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;.Net&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;A&lt;/td&gt;        &lt;td&gt;0&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;a&lt;/td&gt;        &lt;td&gt;1&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;AA&lt;/td&gt;        &lt;td&gt;a&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;AW&lt;/td&gt;        &lt;td&gt;A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Z&lt;/td&gt;        &lt;td&gt;AA&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;z&lt;/td&gt;        &lt;td&gt;AW&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;0&lt;/td&gt;        &lt;td&gt;z&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Z&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Versión de Oracle:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_25D3835C.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="327" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_5A73DF97.png" width="748" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nunca te acostarás sin aprender una cosa más.&lt;/p&gt;  &lt;p&gt;Si es que… mirar código es aburridísimo… pero si miras bien, siempre acabas encontrando algo.&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=8103" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/dotNetFramework/default.aspx">dotNetFramework</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Oracle/default.aspx">Oracle</category></item><item><title>Instalando Windows Seven</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/05/23/instalando-windows-seven.aspx</link><pubDate>Sat, 23 May 2009 12:28:46 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:4196</guid><dc:creator>crisfervil</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Por fin me he atrevido a instalar la RC de Windows 7&lt;/p&gt;  &lt;p&gt;El primer problema con el que me he encontrado es que el programa de instalación no instaló los drivers de la tarjeta gráfica, una NVIDIA Quadro NVS 110M, y como consecuencia, AERO no se había activado. &lt;/p&gt;  &lt;p&gt;Nada más conectarme a internet, se detectaron nuevas actualizaciones disponibles, y entre ellas, el driver que necesitaba. Pero claro, aunque ahora ya tenía driver, AERO seguía desactivado.&lt;/p&gt;  &lt;p&gt;Había que activarlo manualmente. Pero no ha sido tan sencillo como un check en el panel de control.&lt;/p&gt;  &lt;p&gt;Pasos para activar AERO:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_624C3131.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_0C4C2F5A.png" width="312" height="303" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Inicio/buscar AERO&lt;/p&gt;  &lt;p&gt;Seleccionar la opión “Find and fix problems…”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_78BECFB8.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_4CA1D2C7.png" width="386" height="295" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Seguir el asistente… y voilá. Ya tenemos AERO activado.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/image_561A913D.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/image_thumb_3C363541.png" width="459" height="288" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Lo que más me gusta, es el rendimiento. De momento se está portando bastante bien. Veremos a ver cuando le meta el antivirus, je je&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Fuente:    &lt;br /&gt;&lt;a title="http://www.mydigitallife.info/2009/01/13/hack-to-force-enable-aero-in-windows-7/" href="http://www.mydigitallife.info/2009/01/13/hack-to-force-enable-aero-in-windows-7/"&gt;http://www.mydigitallife.info/2009/01/13/hack-to-force-enable-aero-in-windows-7/&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://www.mydigitallife.info/2009/01/13/how-to-turn-on-and-enable-aero-in-windows-7-enable-aero-peek/" href="http://www.mydigitallife.info/2009/01/13/how-to-turn-on-and-enable-aero-in-windows-7-enable-aero-peek/"&gt;http://www.mydigitallife.info/2009/01/13/how-to-turn-on-and-enable-aero-in-windows-7-enable-aero-peek/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=4196" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Windows/default.aspx">Windows</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Visual Studio Custom Tool</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/03/23/visual-studio-custom-tool.aspx</link><pubDate>Mon, 23 Mar 2009 22:38:42 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:3372</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Pasos para crear una custom tool para visual studio (2005 ó 2008)&lt;/p&gt; &lt;p&gt;1 - Crear proyecto Class Library, agregar referencia a Microsoft.VisualStudio.Shell.Interop&lt;/p&gt; &lt;p&gt;2 - Crear la clase:&lt;/p&gt; &lt;div&gt;&lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;
&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Runtime.InteropServices; 

&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; MyCustomTool
{
    [System.Runtime.InteropServices.Guid(&lt;span style="color:#006080;"&gt;&amp;quot;&lt;font color="#ff0000"&gt;81EC1D79-AF71-448b-BD46-A97E096D58C6&lt;/font&gt;&amp;quot;&lt;/span&gt;)]
    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; MyCustomTool: Microsoft.VisualStudio.Shell.Interop.IVsSingleFileGenerator
    {   
        &lt;span style="color:#008000;"&gt;/// Devuelve la extensión que tendrá el código generado&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; DefaultExtension(&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; pbstrDefaultExtension)
        {
            pbstrDefaultExtension = &lt;span style="color:#006080;"&gt;&amp;quot;.myExtension&amp;quot;&lt;/span&gt;;
            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; 0;
        } 

        &lt;span style="color:#008000;"&gt;/// Punto de generación de código&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Generate(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; wszInputFilePath, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; bstrInputFileContents, 
                            &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; wszDefaultNamespace, IntPtr[] rgbOutputFileContents, 
                            &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; pcbOutput, 
                            Microsoft.VisualStudio.Shell.Interop.IVsGeneratorProgress pGenerateProgress)
        {
            &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] generatedCode = System.Text.UTF7Encoding.Default.GetBytes(&lt;span style="color:#006080;"&gt;&amp;quot;Código generado&amp;quot;&lt;/span&gt;); 

            rgbOutputFileContents[0] = Marshal.AllocCoTaskMem(generatedCode.Length);
            Marshal.Copy(generatedCode, 0, rgbOutputFileContents[0], generatedCode.Length);
            pcbOutput = (&lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt;)generatedCode.Length;
            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; 0;
        } 
    }
} 
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;3- Firmar y compilar&lt;/p&gt;
&lt;p&gt;4 - Registrar en la GAC : En el command prompt de visual studio: gacutil /i &amp;quot;MyCustomTool.dll&amp;quot;&lt;/p&gt;
&lt;p&gt;5 - Crear estas entradas en el registro (para visual studio 2005 cambiar el 9.0 por 8.0)&lt;/p&gt;
&lt;p&gt;Para conocer la Public Key Token de un ensamblado que se encuentra en la GAC, usar &lt;font color="#0000ff"&gt;gacutil -l MyCustomTool&lt;/font&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\CLSID\{81EC1D79-AF71-448b-BD46-A97E096D58C6}]
@=&lt;span style="color:#006080;"&gt;&amp;quot;MyCustomTool.MyCustomTool&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;InprocServer32&amp;quot;&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;C:\\WINDOWS\\system32\\mscoree.dll&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;Class&amp;quot;&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;MyCustomTool.MyCustomTool&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;Assembly&amp;quot;&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;MyCustomTool, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b8e943e54c5f6a29&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;ThreadingModel&amp;quot;&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;Both&amp;quot;&lt;/span&gt; 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\{164B10B9-B200-11D0-8C61-00A0C91E29D5}\MyCustomTool]
@=&lt;span style="color:#006080;"&gt;&amp;quot;MyCustomTool&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;CLSID&amp;quot;&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;{81EC1D79-AF71-448b-BD46-A97E096D58C6}&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;GeneratesDesignTimeSource&amp;quot;&lt;/span&gt;=dword:00000001 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\{E6FDF8B0-F3D1-11D4-8576-0002A516ECE8}\MyCustomTool]
@=&lt;span style="color:#006080;"&gt;&amp;quot;MyCustomTool&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;CLSID&amp;quot;&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;{81EC1D79-AF71-448b-BD46-A97E096D58C6}&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;GeneratesDesignTimeSource&amp;quot;&lt;/span&gt;=dword:00000001 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}\MyCustomTool]
@=&lt;span style="color:#006080;"&gt;&amp;quot;MyCustomTool&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;CLSID&amp;quot;&lt;/span&gt;=&lt;span style="color:#006080;"&gt;&amp;quot;{81EC1D79-AF71-448b-BD46-A97E096D58C6}&amp;quot;&lt;/span&gt;
&lt;span style="color:#006080;"&gt;&amp;quot;GeneratesDesignTimeSource&amp;quot;&lt;/span&gt;=dword:00000001 &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;6 - Crear un proyecto cualquiera, y en cualquier archivo, establecer la propiedad (F4) Custom Tool a &lt;em&gt;MyCustomTool&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/VisualStudioCustomTool_6878/image%7B0%7D%5B3%5D.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/VisualStudioCustomTool_6878/image%7B0%7D_thumb%5B1%5D.png" width="322" height="518" alt="" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/VisualStudioCustomTool_6878/image%7B0%7D%5B8%5D.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/VisualStudioCustomTool_6878/image%7B0%7D_thumb%5B4%5D.png" width="317" height="508" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;p&gt;&lt;a title="http://blogs.conchango.com/pauloreichert/archive/2005/05/21/1459.aspx" href="http://blogs.conchango.com/pauloreichert/archive/2005/05/21/1459.aspx" target="_blank"&gt;http://blogs.conchango.com/pauloreichert/archive/2005/05/21/1459.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://msdn.microsoft.com/es-es/magazine/cc301796(en-us).aspx" href="http://msdn.microsoft.com/es-es/magazine/cc301796(en-us).aspx" target="_blank"&gt;http://msdn.microsoft.com/es-es/magazine/cc301796(en-us).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivssinglefilegenerator(VS.80).aspx" href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivssinglefilegenerator(VS.80).aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivssinglefilegenerator(VS.80).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.codeproject.com/KB/dotnet/ResourceClassGenerator.aspx?display=Print" href="http://www.codeproject.com/KB/dotnet/ResourceClassGenerator.aspx?display=Print" target="_blank"&gt;http://www.codeproject.com/KB/dotnet/ResourceClassGenerator.aspx?display=Print&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=3372" width="1" height="1"&gt;</description></item><item><title>Evolución de la interfaz visual</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/03/17/evoluci-243-n-de-la-interfaz-visual.aspx</link><pubDate>Tue, 17 Mar 2009 12:39:29 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:3326</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Me apunto enlace a este artículo que me ha parecido muy bueno.&lt;/p&gt; &lt;p&gt;Es una muestra de lo que han evolucionado las interfaces gráficas en los últimos 30 años.&lt;/p&gt; &lt;p&gt;&lt;a title="http://muycomputer.com/FrontOffice/ZonaPractica/Especiales/especialDet/_wE9ERk2XxDD4oIdxxXVoZxGKDcFmmJlVwLE-_joYA-moyySZ3o5lyeYRP3YNuQYX" href="http://muycomputer.com/FrontOffice/ZonaPractica/Especiales/especialDet/_wE9ERk2XxDD4oIdxxXVoZxGKDcFmmJlVwLE-_joYA-moyySZ3o5lyeYRP3YNuQYX" target="_blank"&gt;http://muycomputer.com/FrontOffice/ZonaPractica/Especiales/especialDet/_wE9ERk2XxDD4oIdxxXVoZxGKDcFmmJlVwLE-_joYA-moyySZ3o5lyeYRP3YNuQYX&lt;/a&gt;&lt;/p&gt; &lt;p&gt;El tema de la interfaz visual ha sido una de las áreas de la programación que me ha parecido más entretenida.&amp;nbsp; Es increíble ver todo lo que se ha evolucionado. Qué nos deparará el futuro?&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=3326" width="1" height="1"&gt;</description></item><item><title>Speed Tests</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/03/13/speed-tests.aspx</link><pubDate>Fri, 13 Mar 2009 15:04:16 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:3307</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Comento esta noticia por parecerme interesante:&lt;/p&gt; &lt;p&gt;&lt;a href="http://arstechnica.com/microsoft/news/2009/03/micr..."&gt;http://arstechnica.com/microsoft/news/2009/03/micr...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Internet Explorer 8 dá una paliza en los test de velocidad a los demás navegadores.&lt;/p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/SpeedTests_E1C0/image%7B0%7D%5B4%5D.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="489" src="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/SpeedTests_E1C0/image%7B0%7D_thumb%5B2%5D.png" width="399" border="0" alt="" /&gt;&lt;/a&gt; &lt;p&gt;Y un vídeo promocional que por cierto está muy chulo.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/windows/internet-explorer/beta/videos.aspx?vindex=14"&gt;http://www.microsoft.com/windows/internet-explorer...&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=3307" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Macro Excel que Ejecuta Procedimiento Almacenado y Consulta Datos</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/03/10/macro-excel-que-ejecuta-procedimiento-almacenado-y-consulta-datos.aspx</link><pubDate>Tue, 10 Mar 2009 16:16:42 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:3294</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;¿Cómo narices hacíamos antes para programar sin intellisense?&lt;/p&gt; &lt;p&gt;Qué infierno. Ni ayudas, ni mensajes de error, ni seguridad de tipos... &lt;/p&gt; &lt;p&gt;En fin.. .para que luego digan que las nuevas herramientas no aumentan la productividad.&lt;/p&gt; &lt;p&gt;Me he tirado más de 4 horas para codificar esta tontería. Espero que a alguno le sirva.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Option&lt;/span&gt; Explicit

&lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; cmdRun_Click()
    
    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; DataConn, cmdSp, cmdSp2
    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; cmdRs, pPartNumber, pMaxLevel

    &lt;span style="color:#008000;"&gt;&amp;#39; Connection&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; DataConn = CreateObject(&lt;span style="color:#006080;"&gt;&amp;quot;ADODB.Connection&amp;quot;&lt;/span&gt;)
    DataConn.Open &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Range(&lt;span style="color:#006080;"&gt;&amp;quot;B1&amp;quot;&lt;/span&gt;).Value &lt;span style="color:#008000;"&gt;&amp;#39; Valor de una celda&lt;/span&gt;
    
    &lt;span style="color:#008000;"&gt;&amp;#39; Iniciamos transaccion aunque sea consulta porque&lt;/span&gt;
    &lt;span style="color:#008000;"&gt;&amp;#39; usamos tablas temporales de oracle&lt;/span&gt;
    DataConn.BeginTrans
    
    
    &lt;span style="color:#008000;"&gt;&amp;#39; Command 1&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; cmdSp = CreateObject(&lt;span style="color:#006080;"&gt;&amp;quot;ADODB.Command&amp;quot;&lt;/span&gt;)
    cmdSp.ActiveConnection = DataConn
    cmdSp.CommandText = &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Range(&lt;span style="color:#006080;"&gt;&amp;quot;B2&amp;quot;&lt;/span&gt;).Value &lt;span style="color:#008000;"&gt;&amp;#39; Valor de una celda&lt;/span&gt;
    cmdSp.CommandType = 4 &lt;span style="color:#008000;"&gt;&amp;#39;adCmdStoredProc&lt;/span&gt;
    
    &lt;span style="color:#008000;"&gt;&amp;#39; Parámetros&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; p1 = cmdSp.CreateParameter(&lt;span style="color:#006080;"&gt;&amp;quot;p1&amp;quot;&lt;/span&gt;, 200, 1, 40)
    p1.Value = &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Range(&lt;span style="color:#006080;"&gt;&amp;quot;B4&amp;quot;&lt;/span&gt;).Value &lt;span style="color:#008000;"&gt;&amp;#39; Valor de una celda&lt;/span&gt;
    cmdSp.Parameters.Append p1
        
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; p2 = cmdSp.CreateParameter(&lt;span style="color:#006080;"&gt;&amp;quot;p2&amp;quot;&lt;/span&gt;, 139, 1, 1)
    p2.Value = VBA.&lt;span style="color:#0000ff;"&gt;CInt&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Range(&lt;span style="color:#006080;"&gt;&amp;quot;B5&amp;quot;&lt;/span&gt;).Value) &lt;span style="color:#008000;"&gt;&amp;#39; Valor de una celda&lt;/span&gt;
    cmdSp.Parameters.Append p2
            
    cmdSp.Execute
   
    &lt;span style="color:#008000;"&gt;&amp;#39; Command 2&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; cmdSp2 = CreateObject(&lt;span style="color:#006080;"&gt;&amp;quot;ADODB.Command&amp;quot;&lt;/span&gt;)
    cmdSp2.ActiveConnection = DataConn
    cmdSp2.CommandText = &lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;.Range(&lt;span style="color:#006080;"&gt;&amp;quot;B3&amp;quot;&lt;/span&gt;).Value &lt;span style="color:#008000;"&gt;&amp;#39; Valor de una celda&lt;/span&gt;
    cmdSp2.CommandType = 1
    
    &lt;span style="color:#008000;"&gt;&amp;#39; Recordset&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; cmdRs = cmdSp2.Execute
    
    &lt;span style="color:#008000;"&gt;&amp;#39; Borrar datos existentes&lt;/span&gt;
    Hoja2.Activate
    Hoja2.Cells.Value = &lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    
    &lt;span style="color:#008000;"&gt;&amp;#39; Ejecutamos transacción porque trabajamos con tablas temporales de Oracle&lt;/span&gt;
    DataConn.RollbackTrans
    
    Application.ScreenUpdating = &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;
    RecordsetToWorkSheet cmdRs, Hoja2, 1, 1, &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;
    Application.ScreenUpdating = &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;
        
    &lt;span style="color:#008000;"&gt;&amp;#39; Liberar recursos&lt;/span&gt;
    DataConn.Close
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; cmdSp = &lt;span style="color:#0000ff;"&gt;Nothing&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Set&lt;/span&gt; cmdRs = &lt;span style="color:#0000ff;"&gt;Nothing&lt;/span&gt;
    
&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;

&lt;span style="color:#008000;"&gt;&amp;#39; Copia Recordset a una Hoja del Libro&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; RecordsetToWorkSheet(recordset, _
                            sheet &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Worksheet, row &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Long&lt;/span&gt;, column &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Long&lt;/span&gt;, headers &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Boolean&lt;/span&gt;)
    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; lcounter &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Long&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; c &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Long&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; headers &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt; &lt;span style="color:#008000;"&gt;&amp;#39;Start of the extract - put field names in Row1&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; c = column &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; column + recordset.Fields.Count - 1
            sheet.Cells(row, c) = recordset.Fields(c - column).Name
        &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt; c
    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;
    lcounter = 1
    row = row + 1
    &lt;span style="color:#0000ff;"&gt;Do&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Until&lt;/span&gt; recordset.EOF
        &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; c = column &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; column + recordset.Fields.Count - 1
            sheet.Cells(row, c) = ParseColumnValue(recordset.Fields(c - column))
        &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt; c
        row = row + 1
        recordset.MoveNext
        lcounter = lcounter + 1
    &lt;span style="color:#0000ff;"&gt;Loop&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;

&lt;span style="color:#008000;"&gt;&amp;#39; Parsea el valor de una columna.&lt;/span&gt;
&lt;span style="color:#008000;"&gt;&amp;#39; Necesario porque en algún caso recordColumn.Value lanza un error&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; ParseColumnValue(recordColumn) &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;On&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Error&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Resume&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;
    ParseColumnValue = recordColumn.Value
    &lt;span style="color:#0000ff;"&gt;GoTo&lt;/span&gt; The_End
    ParseColumnValue = &lt;span style="color:#006080;"&gt;&amp;quot;????&amp;quot;&lt;/span&gt;
The_End:
&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Function&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=3294" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Snippets/default.aspx">Snippets</category></item><item><title>Métrica y Personas</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/03/05/m-233-trica-y-personas.aspx</link><pubDate>Thu, 05 Mar 2009 23:24:02 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:3265</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;No es la primera vez que me ocurre. Un post de otro inspira uno mío. &lt;p&gt;Tras leer &lt;a title="http://blog.ivangadea.com/2009/02/27/management-del-siglo-xx/" href="http://blog.ivangadea.com/2009/02/27/management-del-siglo-xx/"&gt;http://blog.ivangadea.com/2009/02/27/management-del-siglo-xx/&lt;/a&gt; , copio el comentario que me inspiró. &lt;p&gt;----------------------------------------------------------------------------------------------------------------------------------------------------------------- &lt;p&gt;Comprendo muy bien la necesidad de medir para mejorar la productividad. Me parece muy lógico que se pretenda medir para poder predecir resultados futuros.  &lt;p&gt;Lo que no acabo de ver es que las medidas que se vayan tomando en un proyecto puedan servir para otro proyecto futuro.  &lt;p&gt;Me parece que generalmente las empresas de software lo mismo hacen un programa de gestión para un vídeoclub que para una farmacia.  &lt;p&gt;Y los programas, aunque conceptualmente son lo mismo, en realidad no se parecen en absoluto.  &lt;p&gt;Creo que lo que complica la medición no es que existan distintos tipos de programador, que también, sino que los problemas a resolver son distintos.  &lt;p&gt;No veo cómo las métricas de un programa para una farmacia pueden valer para un vídeoclub, y viceversa.  &lt;p&gt;Por mi experiencia, entiendo que las métricas que tomé mientras desarrollaba el programa para la farmacia, me servirán en tanto mi siguiente desarrollo sea para otra farmacia que funcione más o menos igual.  &lt;p&gt;Usando un símil, no sé si un arquitecto que haya diseñado un polideportivo pueda predecir con poco margen cuánto le costará diseñar un edificio de apartamentos. Y digo diseñar, que no construir. &lt;br /&gt;De hecho, no creo que pueda predecir cuanto tardará en diseñar el siguiente polideportivo, a menos que sea bastante parecido. &lt;br /&gt;Y fijaos que la gran diferencia entre lo diseñado por un arquitecto y por un diseñador de software (o arquitecto, si lo preferís) es que lo que diseñe el arquitecto de edificios, será prácticamente lo que finalmente se construya. De hecho, en muchas ocasiones, el arquitecto podrá hasta realizar pruebas de su producto antes de construirlo.  &lt;p&gt;No sé, no he tenido ocasión de preguntárselo a un arquitecto. Pero en la fase de diseño, no hay métrica que valga. &lt;br /&gt;El arquitecto no sabe de antemano cómo será el edificio antes de tener entre sus manos los planos. &lt;br /&gt;Con diseño en mano, la historia es otra.&lt;br /&gt;Sabremos con bastante exactitud cuánto costará levantar una pared. Y sabremos cuántas paredes va haber que levantar.  &lt;p&gt;Y creo que con el software pasa lo mismo. Lo complicado del software es diseñarlo. &lt;br /&gt;Y lo malo del software es que no siempre sabemos de antemano lo que hay que construir. Muchas veces no lo sabe ni el cliente.&lt;br /&gt;Lo malo, o lo bueno del software, es que cuesta prácticamente lo mismo diseñarlo que construirlo. Por eso, no solemos diseñarlo con todo el detalle que lo haría un arquitecto. &lt;br /&gt;Lo malo del software es que no podemos probarlo antes de codificarlo.  &lt;p&gt;Yo creo que las aplicaciones habría que codificarlas dos veces. Una vez para desglosar todas las características que va a tener. Y otra para aplicar unas buenas prácticas. Os aseguro que la segunda vez sabríamos con bastante exactitud cuánto vamos a tardar. Y podremos mejorar la productividad. Y la calidad.  &lt;p&gt;Y la calidad? qué es la calidad? entiendo que la calidad es la medida de los requisitos satisfechos.  &lt;p&gt;En cuántos proyectos habéis trabajado en los que los requisitos estaban completamente descritos? Los requisitos funcionales, los de seguridad, los de rendimiento, los de interfaz, complejidad, mantenibilidad, etc.  &lt;p&gt;Cuando el arquitecto firma un proyecto, el cliente obtiene un contrato en el que se detalla casi de todo. Y allí donde tenga cabida la interpretación habrá una normativa legal que aplicar.  &lt;p&gt;Y otro tema importante: El arquitecto tiene responsabilidad legal sobre el producto que va a construir. Si no se ajusta a los requisitos, si el edificio no se ajusta a la normativa legal, a la memoria de calidades, etc., tiene que responder por ello. &lt;br /&gt;Eso es algo que no he oído que haya pasado en la historia de la informática. Ni tan siquiera cuando han habido accidentes causados por fallos que hayan derivado en pérdidas humanas.  &lt;p&gt;Creo que la mejora en las métricas y en el aumento de la productividad vendrán determinadas por lo que progresemos en estandarizar, desarrollar metodologías,&amp;nbsp; en crear componentes reutilizables, etc.  &lt;p&gt;De hecho, creo que es algo que deberíamos aprender de las otras ingenierías. Creo que su éxito se basa en que rara vez se construye algo de cero. La mayoría de las veces, el trabajo de un ingeniero se trata de combinar adecuadamente elementos ya desarrollados.  &lt;p&gt;(No lo sé con seguridad. ¿qué grado de fiabilidad hay las estimaciones de proyectos de IT? Un proyecto de IT consiste en combinar eficazmente componentes ya desarrollados)  &lt;p&gt;Respecto al tema de la gestión de recursos, y a&amp;nbsp; la manera en la que se distinguen a los programadores buenos de los malos, por mi corta experiencia en la gestión de equipos, diré que las personas que funcionan mejor en un proyecto no son las que más saben, ni las que tienen más experiencia. Para mí, las personas determinantes en un proyecto son las que se implican más, las más motivadas, las que tienen una gran conciencia de equipo y programan sabiendo que el producto es el resultado del trabajo de todos, y no de uno solo, por muy bueno que sea. Yo creo que todos tienen mucho que aportar. El que tiene más experiencia, el que tiene mucha capacidad de análisis, el creativo, cada uno puede encontrar su espacio.&lt;br /&gt;Por supuesto hace falta gente preparada, con conocimientos, experiencia y cierta aptitud. Pero para mí, lo determinante es que la gente esté a gusto, y sienta que su trabajo merece la pena.  &lt;p&gt;Me parece que los proyectos que carezcan de personas que motivadas, tiene todas las papeletas de fracasar.  &lt;p&gt;Creo que este aspecto de la profesión es igual para todos los trabajos en los que se dependa de la gente.  &lt;p&gt;Y un buen manager, uno del siglo XXI,&amp;nbsp; debe saber gestionar estos recursos, y aportar motivación. Dar su espacio a cada uno, y hacer que se sienta valorado, para que pueda aportar lo mejor de sí mismo. Me parece que da igual las carencias que pueda tener una persona suficientemente motivada. Seguro que se esforzará por corregirlas.&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=3265" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/General/default.aspx">General</category></item><item><title>Oracle Home</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2009/03/04/oracle-home.aspx</link><pubDate>Wed, 04 Mar 2009 09:59:35 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:3253</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Me acabo de instalar la versión 11.1 de las Oracle Developer Tools for Visual Studio, y me encuentro con que es necesario instalar tambíen la última versión de los Oracla Data Access Components. &lt;/p&gt; &lt;p&gt;Como mi aplicación funciona con la versión 10 de estas librerías necesito mantenerlas, pero también quiero disfrutar de las novedades de las versión 11 en cuanto a herramientas de desarrollo y a integración con Visual Studio, así que necesito una convivencia pacífica.  &lt;p&gt;¿Es posible?  &lt;p&gt;Sí, sólo debo especificar un directorio de instalación distinto de la versión anterior, y posteriormente eliminar la clave del registro:  &lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraOdac11g_home1 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/OracleHome_9A72/image%7B0%7D%5B7%5D.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="431" src="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/OracleHome_9A72/image%7B0%7D_thumb%5B5%5D.png" width="552" border="0" alt="" /&gt;&lt;/a&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=3253" width="1" height="1"&gt;</description></item><item><title>MACRO EXTRACCION VISUAL STUDIO</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2008/10/06/macro-extraccion-visual-studio.aspx</link><pubDate>Mon, 06 Oct 2008 05:54:25 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:1472</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Pego esta macro de extración para el visual studio que he creado. &lt;/p&gt; &lt;p&gt;Sirve para extraer de un documento todo el texto que cumpla una &lt;u&gt;expresión regular&lt;/u&gt; dada.&lt;/p&gt; &lt;p&gt;La uso para obtener de un &lt;strong&gt;aspx&lt;/strong&gt; todos los &lt;u&gt;ids de los controles&lt;/u&gt;.&lt;/p&gt; &lt;p&gt;La maro, busca en el documento las concidencias con la expresión regular y pega en la ventana de Output el texto correspondiente al primer grupo dentro de la expresión regular.&lt;/p&gt; &lt;p&gt;&lt;u&gt;Expresiones regulares propuestas:&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Si queremos obtener todos los controles que tengan id:&lt;font color="#0080ff"&gt; &lt;strong&gt;id=&amp;quot;([a-zA-Z0-9_]+)&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Para los controles con id que comienze por &lt;strong&gt;txt&lt;/strong&gt;: &lt;font color="#0080ff"&gt;&lt;strong&gt;id=&amp;quot;(txt[a-zA-Z0-9_]+)&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Que comienze por &lt;strong&gt;lbl&lt;/strong&gt; : &lt;font color="#0080ff"&gt;&lt;strong&gt;id=&amp;quot;(lbl[a-zA-Z0-9_]+)&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; ExtraerIDS()
        &lt;span style="color:#008000;"&gt;&amp;#39; Obtener referencia a la ventana de Output&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; win &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Window = _
          DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; ow &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; OutputWindow = win.&lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; owPane &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; OutputWindowPane
        owPane = ow.OutputWindowPanes.Item(&lt;span style="color:#006080;"&gt;&amp;quot;General&amp;quot;&lt;/span&gt;)

        &lt;span style="color:#008000;"&gt;&amp;#39; Activar y limpiar la ventana de Output&lt;/span&gt;
        owPane.Activate()
        owPane.Clear()

        &lt;span style="color:#008000;"&gt;&amp;#39; Activar la ventana del documento activo&lt;/span&gt;
        DTE.ActiveDocument().Activate()

        &lt;span style="color:#008000;"&gt;&amp;#39; Mover el cursor al principio del documento&lt;/span&gt;
        DTE.ActiveDocument.Selection.StartOfDocument()

        &lt;span style="color:#008000;"&gt;&amp;#39; Obtener Parámetros de búsqueda&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; searchRegExpr &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;id=&amp;quot;&lt;/span&gt;&lt;span style="color:#006080;"&gt;&amp;quot;([a-zA-Z0-9_]+)&amp;quot;&lt;/span&gt;&lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
        searchRegExpr = InputBox(&lt;span style="color:#006080;"&gt;&amp;quot;Expresión de Búsqueda&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Extraer IDS&amp;quot;&lt;/span&gt;, searchRegExpr)

        &lt;span style="color:#008000;"&gt;&amp;#39; Establcer parámetros de búsqueda&lt;/span&gt;
        DTE.Find.FindWhat = searchRegExpr
        DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
        DTE.Find.MatchCase = &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;
        DTE.Find.MatchWholeWord = &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;
        DTE.Find.MatchInHiddenText = &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;
        DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
        DTE.Find.Action = vsFindAction.vsFindActionFind
        DTE.Find.Backwards = &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;

        &lt;span style="color:#008000;"&gt;&amp;#39; Ultima línea encontrada. La usamos para no buscar varias veces por el documento&lt;/span&gt;
        &lt;span style="color:#008000;"&gt;&amp;#39; ya que la búsqueda no se detiene al final, sino que vuelve al principio&lt;/span&gt;
        &lt;span style="color:#008000;"&gt;&amp;#39; y sigue buscando&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; lastFoundLine &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = -1

        &lt;span style="color:#008000;"&gt;&amp;#39; Inicializar expresión regular&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; re &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; System.Text.RegularExpressions.Regex(searchRegExpr, Text.RegularExpressions.RegexOptions.IgnoreCase)

        &lt;span style="color:#008000;"&gt;&amp;#39; Bucle de Búsqueda&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;While&lt;/span&gt; DTE.Find.Execute() = vsFindResult.vsFindResultFound &lt;span style="color:#0000ff;"&gt;And&lt;/span&gt; DTE.ActiveDocument.Selection.TopPoint.Line &amp;gt;= lastFoundLine
            &lt;span style="color:#008000;"&gt;&amp;#39; Texto que mostraremos en el panel Output&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; textToShow &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = DTE.ActiveDocument.Selection.Text
            &lt;span style="color:#008000;"&gt;&amp;#39; Buscamos los grupos dentro de la expresión regular&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; match &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Text.RegularExpressions.Match = (re.Match(textToShow, searchRegExpr, Text.RegularExpressions.RegexOptions.IgnoreCase))

            &lt;span style="color:#008000;"&gt;&amp;#39; Si hay algún grupo dentro de la expresión regular&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; match.Groups.Count &amp;gt; 0 &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;
                textToShow = match.Groups(1).Value
            &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;
                textToShow = match.Groups(0).Value
            &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;

            &lt;span style="color:#008000;"&gt;&amp;#39; Si hay algo que mostrar&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; textToShow.Length &amp;gt; 0 &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;
                owPane.OutputString(textToShow &amp;amp; vbCrLf)
            &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;

            &lt;span style="color:#008000;"&gt;&amp;#39; Comprobamos que hayamos llegado al final del documento.&lt;/span&gt;
            lastFoundLine = DTE.ActiveDocument.Selection.TopPoint.Line
        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;While&lt;/span&gt;

        MsgBox(&lt;span style="color:#006080;"&gt;&amp;quot;End!&amp;quot;&lt;/span&gt;)
    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=1472" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Snippets/default.aspx">Snippets</category></item><item><title>.NET Gana Terreno a Java</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2008/10/02/net-gana-terreno-a-java.aspx</link><pubDate>Thu, 02 Oct 2008 06:07:53 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:1397</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Artículo sobre una encuesta que indica la creciente tendencia de la adopción de la plataforma de desarrollo de Microsoft. La encuesta está patrocinada por una empresa.. especializada en Microsoft, así que no me fiaría.&lt;/p&gt; &lt;p&gt;Interesante la parte final en la que se comenta que los desarrolladores de .net se quejan del sobre todo del rendimiento, de los problemas de conexión y de gestión de transacciones. &lt;/p&gt; &lt;p&gt;En cambio los de Java se quejan de los fallos de memoria y de los bugs de la máquina virtual (JVM).&lt;/p&gt; &lt;p&gt;&lt;a href="http://reddevnews.com/news/print.aspx?editorialsid=10250" target="_blank"&gt;http://reddevnews.com/news/print.aspx?editorialsid=10250&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=1397" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Diferencias entre Virtual PC y Virtual Server</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2008/09/22/diferencias-entre-virtual-pc-y-virtual-server.aspx</link><pubDate>Mon, 22 Sep 2008 19:31:30 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:1257</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/DiferenciasentreVirtualPCyVirtualServer_132C8/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="170" alt="image" src="http://cs.crisfervil.com/blogs/crisfervil/WindowsLiveWriter/DiferenciasentreVirtualPCyVirtualServer_132C8/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Me apunto por aquí este enlace de referencia, pues es interesante tener en cuenta las diferencias entre ambas aplicaciones. &lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.technet.com/guillermotaylor/archive/2006/10/26/comparando-virtual-pc-contra-virtual-server.aspx" href="http://blogs.technet.com/guillermotaylor/archive/2006/10/26/comparando-virtual-pc-contra-virtual-server.aspx" target="_blank"&gt;http://blogs.technet.com/guillermotaylor/archive/2006/10/26/comparando-virtual-pc-contra-virtual-server.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Una observación a tener en cuenta lectores no asiduos del lenguaje IT.&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;Modo Host&lt;/strong&gt;&lt;/u&gt;: Cuando Guillermo se refiere a que el &lt;strong&gt;Virtual PC&lt;/strong&gt; puede &amp;quot;&lt;em&gt;correrse&lt;/em&gt; en modo host&amp;quot;, hace referencia a que la aplicación puede instalarse sobre los Sistemas Operativos que menciona.&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;Modo Guest&lt;/strong&gt;&lt;/u&gt;: Cuando habla del modo Guest indica los Sistemas Operativos que pueden instalarse sobre la máquina virtual.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Me punto también este enlace sobre las &lt;strong&gt;diferencias&lt;/strong&gt; entre los distintos modelos de Virtualización. Virtual Machine Monitor (VMM), VIrtual PC, Hypervisor.&lt;/p&gt; &lt;p&gt;A alguno os suenan los términos &lt;strong&gt;Hypervisor&lt;/strong&gt; Monolítico o &lt;strong&gt;Microkernelizado&lt;/strong&gt;? pues leed el artículo. &lt;/p&gt; &lt;p&gt;&lt;a title="http://geeks.ms/blogs/eliasmereb/archive/2007/07/09/modelos-de-virtualizaci-243-n.aspx" href="http://geeks.ms/blogs/eliasmereb/archive/2007/07/09/modelos-de-virtualizaci-243-n.aspx" target="_blank"&gt;http://geeks.ms/blogs/eliasmereb/archive/2007/07/09/modelos-de-virtualizaci-243-n.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Otro enlace interesante sobre virtualización:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Introducción a las máquinas virtuales: &lt;a title="http://observatorio.cnice.mec.es/modules.php?op=modload&amp;amp;name=News&amp;amp;file=article&amp;amp;sid=462" href="http://observatorio.cnice.mec.es/modules.php?op=modload&amp;amp;name=News&amp;amp;file=article&amp;amp;sid=462" target="_blank"&gt;http://observatorio.cnice.mec.es/modules.php?op=modload&amp;amp;name=News&amp;amp;file=article&amp;amp;sid=462&lt;/a&gt;&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=1257" width="1" height="1"&gt;</description></item><item><title>Talento + Tiempo Libre</title><link>http://cs.crisfervil.com/blogs/crisfervil/archive/2008/09/21/talento-tiempo-libre.aspx</link><pubDate>Sun, 21 Sep 2008 16:31:49 GMT</pubDate><guid isPermaLink="false">0720482e-2873-4088-a72f-8c5b34fcb11b:1241</guid><dc:creator>crisfervil</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Sin duda en el mundo existe mucha gente con talento y tiempo libre.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=-nZgIK3FUrc&amp;amp;NR=1" target="_blank"&gt;http://www.youtube.com/watch?v=-nZgIK3FUrc&amp;amp;NR=1&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Es un vídeo de uno que ha pintado &lt;a href="http://es.wikipedia.org/wiki/La_Gioconda" target="_blank"&gt;La Mona Lisa&lt;/a&gt; usando sólo el &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Paint" target="_blank"&gt;Paintbrush&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://cs.crisfervil.com/aggbug.aspx?PostID=1241" width="1" height="1"&gt;</description><category domain="http://cs.crisfervil.com/blogs/crisfervil/archive/tags/OffTopic/default.aspx">OffTopic</category></item></channel></rss>