假设你的密码是:123456,明文传输,就是在网络中直接传送123456;
密文传输,就是加密以后在传送,比如加密后变成abcdef,对方收到后还需要解密还原成:123456;
因此密文安全性高,但是对系统要求也会高些。
Flex根据明文和密钥,采用DES加密算法进行加密,生成密文:
private function result_getUserInfo(event:ResultEvent):void {
//向result_getUserInfo方法(函数)里面添加
redId,ip,miwen,miwen0x,password,minwen,
//通过result_getUserInfo方法,从tomcat接收这些参数的数据
var red5Id:String;
var ip:String;
var miwen:String;
var miwen0x:String;
var password:String;
var mingwen:String;
var str:String = String(event.result);
var d:ArrayCollection = new ArrayCollection([com.adobe.serialization.json.JSON.decode(str)]);
Alert.show("str" +d);
var arr:Array=new Array();
var arrlist:Array=new Array();
ip=d[0].ip; //red5 IP
mingwen=d[0].mingwen; //明文
password=d[0].password; //密钥
red5Id=d[0].red5Id; //red5 ID
userId=d[0].userId;
yuntaitype=d[0].yuntaitype;
for(var i:int=0;i<d[0].data.length;i++){
board.addItem({"board":d[0].data[i].videoNodeId,"boardName":d[0].data[i].videoNodeName}); //开发板列表
}
/*************对明文加密*************/
var b_ba:ByteArray=encrypt(password,mingwen);
//字符串形式的密文
/*String str = new String(Base64.encode(baos.toByteArray()));
把 byte 数组 编写成 字符串 */
var b_ciphertext:String=Base64.encodeByteArray(b_ba);
miwen=b_ciphertext;
miwen0x=byteArrayTo16(b_ba);
//服务端调用客户端的onRep,offRep,fb1Rep方法,因为这些方法给服务器调用的,他们附着在conn.client上。
//因为AS3的NetConnection是封闭的无法直接将方法附着在conn上面,但client是object类型的,
//它是动态的,所以可以附着在conn.client上
client1.onRep=this.onRep;
client1.offRep=this.offRep;
client1.fblRep=this.fblRep;
conn.client=this.client1;
conn.addEventListener(NetStatusEvent.NET_STATUS,netStatus);
conn.connect("rtmp://"+ip+":1935/chapter9",miwen0x,userId);
}
/**
* 把ByteArray转换为16进制的形式的字符串
* @param ba
* @param name
* @return
*/
private function byteArrayTo16(ba:ByteArray):String{
ba.position=0;
var b_str:String="";
while (ba.bytesAvailable > 0) {
b_str+=ba.readUnsignedByte().toString(16);
}
return b_str;
}
/**
* 加密
* @param key 加解密用的key
* @param data 被加密的字符串
* @return 加密后生成ByteArray数据
*/
private function encrypt(key:String,data:String):ByteArray{
trace("执行加密方法,key:",key,",被加密的字符串:",data);
//实验化key的Bytearray对象,给DESKey使用
var b_keyByteArray:ByteArray=new ByteArray();
b_keyByteArray.writeUTFBytes(key);
//实例化DESKey
var b_desKey:DESKey=new DESKey(b_keyByteArray);
//不只是有ecb还有cbc,cfb等
var b_ecb:ECBMode=new ECBMode(b_desKey);
//把需要加密字符串转换为ByteArray
var b_byteArray:ByteArray=convertStringToByteArray(data);
//执行加密
b_ecb.encrypt(b_byteArray);
return b_byteArray;
}
public function convertStringToByteArray(str:String):ByteArray
{
var bytes:ByteArray;
if (str)
{
bytes=new ByteArray();
bytes.writeUTFBytes(str);
}
return bytes;
}